Alguém sabe como eu posso usar as mesmas teclas para mover entre janelas Vim e painéis Tmux (ou WM)?

3

Alguém sabe como eu posso usar as mesmas teclas para mover entre janelas Vim e painéis Tmux (ou WM)?

Por exemplo, quando uso minha combinação de teclas para ir para o painel direito no VIM, o VIM deve primeiro detectar se realmente há um painel VIM à direita. Caso contrário, ele deve chamar um comando Tmux para ir para o painel tmux à direita (se existir um painel tmux à direita).

Algo semelhante teria que acontecer se você voltar a estar em um painel do Tmux.

Eu suponho que além do Tmux você também poderia usar isso com um gerenciador de janelas lado a lado.

Atualização: sair do VIM para um painel do Tmux pode ser feito da seguinte maneira:

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> 

Ainda não tenho certeza se voltar é possível, mas vou investigar isso.

    
por Erik 24.08.2012 / 12:05

1 resposta

3

Mislav Marohnic e Chris Toomey, do ThoughtBot, vieram com uma solução para este aqui . Ele usa Ctrl + h / j / k / l para alternar entre os painéis no Vim e no tmux da maneira esperada; e Ctrl + \ para mudar para o anterior.

Edit: Eu sugeri anteriormente algo que nunca experimentei. Se por algum motivo você estiver interessado, veja o histórico de edições desta resposta.

    
por 25.08.2012 / 08:18