在 Vim 中,我设置了 Ctrl+箭头键来跳过单词。在 gnome-terminal 中运行 Vim 时,这工作得很好。
但是,当使用byobu (tmux) 时,它显示出奇怪的行为:它会删除光标后的所有内容。
作为参考,这些是我的 vim 设置:
:inoremap <C-Left> <C-\><C-O>b
:inoremap <C-Right> <C-\><C-O>w
Run Code Online (Sandbox Code Playgroud)
问题是双重的。首先,tmux
默认情况下将控制箭头键从一种类型的转义序列转换为另一种类型。所以特殊的键,例如controlleft在vim
没有修饰符的情况下发送到,例如,left。如果您习惯于cat -v
查看不同的转义序列,您可能会看到类似这样的内容
^[OD
Run Code Online (Sandbox Code Playgroud)
与此(在 tmux 之外):
^[[1;5D
Run Code Online (Sandbox Code Playgroud)
线
set-window-option -g xterm-keys on
Run Code Online (Sandbox Code Playgroud)
修复了那个方面。另一部分是tmux
默认情况下使用终端描述screen
。该终端描述没有描述控制箭头键。终端数据库中的这些条目最适合 VTE (gnome-terminal):
还有其他的,比如
这将在运行时被自动选择screen
,如果对应的TERM
外是vte
,vte-256color
等 tmux
不执行此自动选择; 你必须修改它的配置文件。
顺便说一句,没有“screen.xterm”条目,因为它会干扰screen
. 与 没有冲突TERM=xterm-new
。
如果您有一个默认(最小)终端数据库,例如ncurses-base
在 Debian 中,您可能没有这些。更常见的是xterm-256color
,它足够接近与 vim 和 tmux 一起使用。
例如,如果我将.tmux.conf
它添加到我的文件中,它的行为就像你在 vim 中期望的那样:
set -g default-terminal "xterm-256color"
Run Code Online (Sandbox Code Playgroud)
进一步阅读: