Answers:
cat
在内部运行tmux
并按有问题的键找出它们生成的转义码。对我来说,这给^[[D
和^[[C
。然后,只需直接映射那些转义码即可。
nnoremap ^[[D gT
nnoremap ^[[C gt
其中的^[
是转义字符,可以通过按<CTRL-v><ESC>
vim 插入。
为了获得最佳功能,需要正确设置几个配置级别。
xterm-256color
)。通过TERM环境变量标识的terminfo数据库条目告诉TMUX如何识别为经修饰的箭头键的序列(用户定义的功能{ kUP
,kDN
,kRIT
,kLFT
} {,3
.. 7
})。配置tmux以生成序列。将xterm-keys
session选项设置为,on
以便tmux收到其TERM标识的序列时将生成自己的xterm样式序列。在您的~/.tmux.conf
:
set-option -g xterm-keys on
screen
在tmux中使用基于TERM的术语(例如screen-256color
)。这告诉在tmux内部运行的程序如何控制tmux的终端(重新)仿真,以及它们应从tmux期待什么响应。不幸的是,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
)。
然后,您可以映射键而不是它们的硬编码序列:
nnoremap <C-Right> gt
nnoremap <C-Left> gT
set t_Co=256
〜/ .vimrc中的设置是否有帮助?这只是一种颜色设置,但可能有助于清除一些问题。
您也可以ctrl+Arrow
在〜/ .vimrc中重新映射键...
编辑:您是否ctrl+Arrow
在GNU屏幕会话中尝试过?我认为这可能是您的问题。