运行tmux时映射箭头键

Ros*_*one 8 vim tmux

这些键映射在tmux中停止工作.在我.vimrc,我有:

nmap <Space> i
map <C-Down> <C-w>j
map <C-Up> <C-w>k
map <C-Left> <C-w>h
map <C-Right> <C-w>l
Run Code Online (Sandbox Code Playgroud)

当我跑步时:map,我看到:

   <C-Right>     <C-W>l
   <C-Left>      <C-W>h
   <C-Up>        <C-W>k
   <C-Down>      <C-W>j
Run Code Online (Sandbox Code Playgroud)

然而,当我同时按下控制键和箭头键时,它表现得好像没有设置键绑定.

Chr*_*sen 15

Vim知道类似xterm的终端(由TERM标识xterm,或者对t_RV序列的特定响应,如果已定义)支持某些已修改密钥的扩展序列,但它不会为screenTERM(您应该在tmux).

但是,如果存在TMUX,您可以告诉Vim这些序列并启用它们,并且TERM以screen(tmux下的第一行启用(更好)鼠标支持启用它们,您可能也喜欢):

if &term =~ '^screen' && exists('$TMUX')
    set mouse+=a
    " tmux knows the extended mouse mode
    set ttymouse=xterm2
    " 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"
    execute "set <xHome>=\e[1;*H"
    execute "set <xEnd>=\e[1;*F"
    execute "set <Insert>=\e[2;*~"
    execute "set <Delete>=\e[3;*~"
    execute "set <PageUp>=\e[5;*~"
    execute "set <PageDown>=\e[6;*~"
    execute "set <xF1>=\e[1;*P"
    execute "set <xF2>=\e[1;*Q"
    execute "set <xF3>=\e[1;*R"
    execute "set <xF4>=\e[1;*S"
    execute "set <F5>=\e[15;*~"
    execute "set <F6>=\e[17;*~"
    execute "set <F7>=\e[18;*~"
    execute "set <F8>=\e[19;*~"
    execute "set <F9>=\e[20;*~"
    execute "set <F10>=\e[21;*~"
    execute "set <F11>=\e[23;*~"
    execute "set <F12>=\e[24;*~"
endif
Run Code Online (Sandbox Code Playgroud)

如注释所示,您还需要xterm-keys启用窗口选项.您可以像这样(在您的~/.tmux.conf)中为您的所有窗口执行此操作:

set-option -gw xterm-keys on
Run Code Online (Sandbox Code Playgroud)

(请记住,更改~/.tmux.conf不会自动加载.为了有效,您需要手动运行此命令(在tmuxshell命令中或在前缀:提示符下),或者使用source ~/.tmux.conf(在tmuxshell命令中重新加载配置文件,或者在前缀:提示符下),或重新启动服务器(退出所有会话并重新启动tmux)).