如何在tmux的Vim中使用shift + arrows和ctrl + arrows?


44

这一切都在OS X的iTerm2中。

我曾经有过

export TERM='xterm-256color'

在我的.bashrc。这意味着tmux中的Vim确实使用了256种颜色。

一旦我添加

set -g xterm-keys on

然后带有修饰符的键盘快捷键在Vim中可以正常工作。即:shift+left/right我映射到切换Vim选项卡,ctrl+up/down映射到移动(“冒泡”)行,并且shift+left/right在命令行模式下(例如,输入类似:e foo bar baz)时可以按字跳动。

然而,这种设置有问题,即Vim的背景颜色只能说明后面的文字,提到这里

所以我删除了

export TERM='xterm-256color'

从我的.bashrc,而不是把它放在我的.tmux.conf

set -g default-terminal "screen-256color"

这样可以固定Vim的背景颜色,但是却破坏了键盘快捷键-它们会执行意外的操作(移动光标,删除文本)。

通过使用ctrl+v插入来自组合键逐字输出(如描述在这里),我是能够解决它:

map [1;5A <C-Up>
map [1;5B <C-Down>
map [1;2D <S-Left>
map [1;2C <S-Right>
cmap [1;2D <S-Left>
cmap [1;2C <S-Right>

这样可以使快捷方式起作用,但感觉不像是正确的解决方案。谁能告诉我这里发生了什么以及如何解决?

Answers:


68

您需要设置tmux窗口选项,xterm-keys以便tmux将这些键传递到其终端。您可能希望将其放入您的~/.tmux.conf

set-window-option -g xterm-keys on

当TERM为-时xtermVim通常会自动设置对这些键的处理,但是由于TERM为,它会跳过这一点screen-256color。您可以~/.vimrc像这样手动配置这些密钥:

if &term =~ '^screen'
    " tmux will send xterm-style keys when its xterm-keys option is on
    execute "set <xUp>=\e[1;*A"
    execute "set <xDown>=\e[1;*B"
    execute "set <xRight>=\e[1;*C"
    execute "set <xLeft>=\e[1;*D"
endif

至少这样,您不必映射所有各种组合。


谢谢!看起来比我的要好,我很欣赏这个解释。我所拥有的而不是您的行所固定的一件事是,向上/向下箭头在Command-T插件中不起作用,如下所述:superuser.com/questions/237751/…我只是map <Esc>[B <Down>从一个添加的的答案。似乎插件本身做出一些错误假设的原因。
Henrik N

需要明确的是,您的解决方案加上map <Esc>[B <Down>其他线程的内容意味着现在一切正常。
Henrik N

@HenrikN能否请您澄清一下map <Esc>[B <Down>?将其添加到我的.vimrc文件中看不到任何区别。
Francesco Boccardo

@Francesco Boccardo:如果您按照我之前的评论中的链接进行操作,然后再次从该链接中进行链接,您将进入superuser.com/a/215181,该文件似乎详细地解释了这一问题:)
Henrik N

@HenrikN谢谢。因此,这可能是与OSX相关的问题,或者这已经在这7年中得到了解决,因为按命令(control?)+ r不会对tmux的vim中的箭头键造成干扰(我在Linux上)。
Francesco Boccardo

8

如此处所述,通过清除终端选项(在Vim中运行,然后按+ 刷新终端的显示)来禁用背景颜色擦除(BCE),以便在tmux和GNU屏幕中使用Vim时,配色方案能够正常工作。t_ut:set t_ut=ControlL

这样,您既可以保留正确的按键检测TERM值,xterm-256color又可以获取正确的Vim配色方案渲染!:-)


1
美丽!出色的侦探工作。
Henrik N

2
这正是我所做的确切更改:github.com/henrik/dotfiles/commit/…颜色和修饰键似乎在tmux的内部和外部都可以正常工作。
Henrik N
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.