Кто-нибудь знает, как я могу использовать одни и те же клавиши для перемещения между окнами 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>
Еще не уверен, возможно ли возвращение назад, но я собираюсь исследовать это.