在 Vim 中,我设置了 Ctrl+箭头键来跳过单词。当在 gnome 终端内运行 Vim 时,这工作得很好。
然而,当使用屏风(tmux),它显示了奇怪的行为:它删除了光标之后的所有内容。
作为参考,这些是我的 vim 设置:
:inoremap <C-Left> <C-\><C-O>b
:inoremap <C-Right> <C-\><C-O>w
答案1
问题是双重的。首先,tmux
默认情况下将控制箭头键从一种类型的转义序列转换为另一种类型。因此,诸如 之类的特殊键会在不带修饰符的情况下controlleft发送到,例如。如果您经常查看不同的转义序列,您可能会看到类似这样的内容vim
leftcat -v
^[OD
与此相对(在 tmux 之外):
^[[1;5D
线路
set-window-option -g xterm-keys on
修复了这个方面。另一部分是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"
进一步阅读:
- XTERM 扩展(终端数据库)
- vim:如何指定方向键
- 如何查看键盘发送的内容?
答案2
从这里您可以在byobu中解绑组合键:
创建一个文件~/.byobu/.tmux.conf
(如果文件存在则添加):
set-window-option -g xterm-keys on
然后将以下内容添加到~/.byobu/keybindings.tmux
:
unbind-key -n C-Left
unbind-key -n C-Right