将 Byobu 与 tmux 一起使用时,在 Vim 中使用 Ctrl+箭头键的问题

shi*_*ams 13 vim tmux byobu

在 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)

Tho*_*key 9

问题是双重的。首先,tmux默认情况下将控制箭头键从一种类型的转义序列转换为另一种类型。所以特殊的键,例如controlleftvim没有修饰符的情况下发送到,例如,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外是vtevte-256colortmux不执行此自动选择; 你必须修改它的配置文件。

顺便说一句,没有“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)

进一步阅读: