使用Tmux和Vim让终端在终端中工作

时间:2016-02-11 03:41:28

标签: vim terminal tmux

我正在尝试使Alt + h/j/k/l切换tmux窗格和vim窗口。但由于某些原因,我的终端(xfce4-terminal)和Alt彼此不能很好地协作。我通过以下脚本获得Alt + h/j/k/l来在vim中切换窗口:

nnoremap <silent> <M-h> :TmuxNavigateLeft<cr>
nnoremap <silent> <M-j> :TmuxNavigateDown<cr>
nnoremap <silent> <M-k> :TmuxNavigateUp<cr>
nnoremap <silent> <M-l> :TmuxNavigateRight<cr>
nnoremap <silent> <M-\> :TmuxNavigatePrevious<cr>

let c='a'
while c <= 'z'
  exec "set <A-".c.">=\e".c
  exec "imap \e".c." <A-".c.">"
  let c = nr2char(1+char2nr(c))
endw

说实话,我发现上述脚本的后半部分不在互联网上,并且不明白它在做什么。 现在,在我的tmux配置中,我有:

bind -n M-h if-shell "$is_vim" "send-keys M-h" "select-pane -L"
bind -n M-j if-shell "$is_vim" "send-keys M-j" "select-pane -D"
bind -n M-k if-shell "$is_vim" "send-keys M-k" "select-pane -U"
bind -n M-l if-shell "$is_vim" "send-keys M-l" "select-pane -R"

结果是我可以在vim中切换窗口,但是无法在tmux中切换窗格。我该如何解决这个问题?我使用xfce4作为我的桌面环境运行Arch Linux。这个问题似乎在xterm,xfce4-terminal和gnome-terminal中持续存在。

1 个答案:

答案 0 :(得分:1)

根据:help :map-alt-keys终端,在将数据传输到程序时,将Alt键作为转义字符。因此,您应该将映射修改为以下内容:

nnoremap <silent> ^[h :TmuxNavigateLeft<cr>
nnoremap <silent> ^[j :TmuxNavigateDown<cr>
nnoremap <silent> ^[k :TmuxNavigateUp<cr>
nnoremap <silent> ^[l :TmuxNavigateRight<cr>
nnoremap <silent> ^[\ :TmuxNavigatePrevious<cr>

^[<C-v><Esc>插入到Vim中。

相关问题