3

Кто-нибудь знает, как я могу использовать одни и те же клавиши для перемещения между окнами Vim, а также панелями Tmux (или tiling 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 ответ1

3

Мислав Маронич и Крис Туми из Thinkbot придумали решение этой проблемы здесь. Он использует Ctrl+h/j/k/l для переключения между панелями в Vim и tmux так, как вы ожидаете; и Ctrl+\, чтобы перейти к предыдущему.

Изменить: я ранее предложил то, что я никогда не пробовал. Если по какой-то причине вам это интересно, посмотрите историю изменений этого ответа.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .