有人知道如何使用相同的键在 Vim 窗口以及 Tmux(或平铺 WM)窗格之间移动吗?

有人知道如何使用相同的键在 Vim 窗口以及 Tmux(或平铺 WM)窗格之间移动吗?

有人知道如何使用相同的键在 Vim 窗口以及 Tmux(或平铺 WM)窗格之间移动吗?

例如,当我使用组合键移动到 VIM 中的右侧窗格时,VIM 应该首先检测右侧是否真的有 VIM 窗格。如果没有,它应该调用 Tmux 命令移动到右侧的 tmux 窗格(如果右侧存在 tmux 窗格)。

如果您在 Tmux 窗格中向后移动,也会发生类似的事情。

我认为除了 Tmux 之外,您还可以将它与平铺窗口管理器一起使用。

更新:从 VIM 移出到 Tmux 窗格可以按如下方式完成:

function! WinMove(key) 
    let t:curwin = winnr()
    exec "wincmd ".a:key
    if (t:curwin == winnr()) "we haven't moved
        if (match(a:key,'[h]')) "we're we going left
            silent execute "!tmux select-pane -L &>/dev/null &" | redraw!
        elseif (match(a:key,'[j]')) "we're we going down
            silent execute "!tmux select-pane -D &>/dev/null &" | redraw!
        elseif (match(a:key,'[k]')) "we're we going up
            silent execute "!tmux select-pane -U &>/dev/null &" | redraw!
        elseif (match(a:key,'[l]')) "we're we going right
            silent execute "!tmux select-pane -R &>/dev/null &" | redraw!
        endif
    endif
endfunction

map  <Esc><Up> <A-Up>
nmap <silent> <A-Right> :call WinMove('k')<CR> 

map  <Esc><Down> <A-Down>
nmap <silent> <A-Right> :call WinMove('j')<CR> 

map  <Esc><Left> <A-Left>
nmap <silent> <A-Right> :call WinMove('h')<CR> 

map  <Esc><Right> <A-Right>
nmap <silent> <A-Right> :call WinMove('l')<CR> 

目前还不确定是否有可能搬回去,但我会调查一下。

答案1

Mislav Marohnic 和 thoughtbot 的 Chris Toomey 想出了一个解决方案这里。它使用Ctrl+h/j/k/l以您期望的方式在 Vim 和 tmux 中切换窗格;使用Ctrl+\切换到前一个窗格。

编辑:我之前建议过一些我从未真正尝试过的东西。如果你出于某种原因对此感兴趣,请查看此答案的编辑历史。

相关内容