我正在想办法如何聚vim
在一起tmux
玩。
我的问题是:当我使用时,xterm-256color
我可以vim
很好地工作,但背景无法正确渲染。
我通过使用修复了这个问题screen-256color
。这看起来不错,但破坏了Ctrl + arrow keys
(它们进入插入模式并删除 4 行)。我想使用这些映射来切换vim
.
我该如何让它发挥作用?
答案1
为了获得最佳功能,需要正确设置多个级别的配置。
- 配置多路复用器来识别序列。启动前多路复用器,设置适合您的终端仿真器的 TERM 值(例如
xterm-256color
)。由 TERM 环境变量标识的 terminfo 数据库条目告诉多路复用器如何识别修改后的箭头键的序列(用户定义的功能 {kUP
,kDN
,kRIT
,kLFT
}{,3
..7
})。 配置多路复用器来生成序列。将会话
xterm-keys
选项设置为on
多路复用器当它接收到其 TERM 标识的序列时,将生成自己的 xterm 样式序列。在你的~/.tmux.conf
:set-option -g xterm-keys on
- 配置里面运行的程序多路复用器使用/期望其大部分序列。确保您
screen
在内部使用基于 - 的术语多路复用器(例如screen-256color
)。这告诉里面运行的程序多路复用器如何控制多路复用器的终端(重新)仿真以及他们应该期望得到什么响应多路复用器。 不幸的是,
screen
基于 terminfo 的数据库条目通常不会为修改后的箭头键定义任何序列(即它们可能没有kUP
等等),因此内部运行的程序多路复用器可能不知道会出现这样的序列。您将需要手动配置任何您想要识别这些键的程序。在维姆,您可以将其放入您的~/.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
)。然后您可以映射键而不是硬编码序列:
nnoremap <C-Right> gt nnoremap <C-Left> gT
答案2
运行并按cat
下相tmux
关键以找出它们生成的转义码。对我来说,这给出了^[[D
和^[[C
。然后直接映射这些转义码即可。
nnoremap ^[[D gT
nnoremap ^[[C gt
其中 是^[
转义字符,您可以通过<CTRL-v><ESC>
在 vim 中按 来插入该字符。
答案3
正如这里所解释的, 禁用背景颜色擦除(BCE) 通过清除t_ut
终端选项(:set t_ut=
在 Vim 中运行,然后按Control+L刷新终端的显示),以便在 tmux 和 GNU 屏幕中使用 Vim 时,配色方案可以正常工作。
这样,您可以保持正确的键检测TERM
值xterm-256color
,同时也获得正确的 Vim 配色方案渲染! :-)
答案4
set t_Co=256
~/.vimrc 中的设置有帮助吗?这只是一个颜色设置,但可能有助于解决一些问题。
ctrl+Arrow
您也可以重新映射~/.vimrc 中的键...
编辑:你尝试过ctrl+Arrow
GNU 屏幕会话吗?我想这可能是你的问题。