如何使vim与tmux正常工作?


19

我想弄清楚如何获得vimtmux一起玩。

我的问题是:当我使用时,xterm-256color我可以vim很好地工作,但是背景无法正确渲染。

我使用修复了这个问题screen-256color。这看起来不错,但会中断Ctrl + arrow keys(它们进入插入模式并删除4行)。我想使用这些映射来切换中的标签vim

我该如何工作?

Answers:


8

cat在内部运行tmux并按有问题的键找出它们生成的转义码。对我来说,这给^[[D^[[C。然后,只需直接映射那些转义码即可。

nnoremap ^[[D gT
nnoremap ^[[C gt

其中的^[是转义字符,可以通过按<CTRL-v><ESC>vim 插入。


那并没有改变我vim的行为。
outsmartin 2012年

在tmux中启动cat并按键时,会显示什么内容?
米卡·菲舍尔

^ [[1; 5C和^ [[1; 5D。好主意,我不知道该怎么买。刚刚尝试过。有用!谢谢。
outsmartin 2012年

大。我编辑了答案,以合并该方法以获得正确的转义码。
米卡·菲舍尔

22

为了获得最佳功能,需要正确设置几个配置级别。

  1. 配置tmux以识别序列。启动tmux之前,请设置一个适合您的终端仿真器的TERM值(例如xterm-256color)。通过TERM环境变量标识的terminfo数据库条目告诉TMUX如何识别为经修饰的箭头键的序列(用户定义的功能{ kUPkDNkRITkLFT} {,3.. 7})。
  2. 配置tmux以生成序列。将xterm-keyssession选项设置为,on以便tmux收到其TERM标识的序列时将生成自己的xterm样式序列。在您的~/.tmux.conf

    set-option -g xterm-keys on
    
  3. 配置运行在tmux中的程序以使用/预期其大部分序列。确保screentmux中使用基于TERM的术语(例如screen-256color)。这告诉在tmux内部运行的程序如何控制tmux的终端(重新)仿真,以及它们应从tmux期待什么响应。
  4. 不幸的是,screen基于terminfo数据库的条目通常没有为修改的箭头键定义任何序列(即它们可能没有定义kUP,等等),因此在tmux中运行的程序可能不知道期望这些序列。您将需要手动配置要识别这些键的任何程序。在Vim中,您可以将其放入~/.vimrc

    if &term =~ '^screen'
        " tmux will send xterm-style keys when xterm-keys 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
    

    如果发现使用-variant会导致正常的箭头键停止工作,则您可能希望不使用这些变体x(即<Up>代替<xUp>,等等)x

    这样定义键的优点是,您不必分别映射每个修饰符组合(Shift,Control,Contol + Shift,Meta,Meta + Shift,Meta + Control,Meta + Control + Shift);在*得到特别的解释来处理所有的相关序列(见:help xterm-modifier-keys)。

  5. 然后,您可以映射键而不是它们的硬编码序列:

    nnoremap <C-Right> gt
    nnoremap <C-Left> gT
    

1
嘿,这很完美!
Pablo Olmos de Aguilera C.

2

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

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


1

set t_Co=256〜/ .vimrc中的设置是否有帮助?这只是一种颜色设置,但可能有助于清除一些问题。

您也可以ctrl+Arrow在〜/ .vimrc中重新映射键...

编辑:您是否ctrl+Arrow在GNU屏幕会话中尝试过?我认为这可能是您的问题。


它的外观和屏幕使用xterm-256color工作正常
outsmartin

集t_Co = 256藏汉做
outsmartin

有帮助吗?
Sardathrion-恢复莫妮卡

很不幸的是,不行。您对remapign ctrl + arrow到底是什么意思?我用它们已经重新映射来在vim中切换标签。
outsmartin 2012年

其映射如下:map <C-Right> gt
outsmartin 2012年
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.