如何让 vim 正确使用 tmux?

out*_*tin 20 vim keyboard-shortcuts tmux

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

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

我使用screen-256color. 这看起来不错,但打破了Ctrl + arrow keys(他们进入插入模式并删除 4 行)。我想使用这些映射来切换vim.

我如何让这个工作?

Chr*_*sen 23

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

  1. 配置tmux以识别序列。在启动tmux之前,设置一个适合您的终端模拟器的 TERM 值(例如xterm-256color)。由 TERM 环境变量标识的 terminfo 数据库条目告诉tmux如何识别修改后的箭头键的序列(用户定义的功能 { kUP, kDN, kRIT, kLFT}{, 3.. 7})。
  2. 配置tmux以生成序列。将会话xterm-keys选项设置为,on以便tmux在收到其 TERM 标识的序列时将生成自己的 xterm 样式序列。在您的~/.tmux.conf

    set-option -g xterm-keys on
    
    Run Code Online (Sandbox Code Playgroud)
  3. 配置在tmux内运行的程序以使用/期望其大部分序列。确保您screentmux(例如screen-256color)中使用了基于 TERM 的术语。这告诉在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
    
    Run Code Online (Sandbox Code Playgroud)

    如果您发现使用-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
    
    Run Code Online (Sandbox Code Playgroud)


Mik*_*her 8

运行cattmux,并按问题的关键,找出它们所产生的转义码。对我来说,这给了^[[D^[[C。然后直接映射那些转义码。

nnoremap ^[[D gT
nnoremap ^[[C gt
Run Code Online (Sandbox Code Playgroud)

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