web-dev-qa-db-ja.com

vim-tmux-C- [hjkl]の代わりにtmuxプレフィックスを使用するナビゲーター

Tmuxとvim側にvim-tmux-navigatorをインストールしましたが、Ctrl-[hjkl]を使用してvimペインとtmuxウィンドウ間を移動できます

しかし:これは、readline(またはbash?)ショートカットが上書きされることを意味します。 Ctrl-k(行末まで削除)、使用したい。

Tmuxプレフィックスを要求するようにキーを再マップしようとするすべての試み。 Ctrl-b [hjkl]vim-tmux-navigatorが失敗しました。

誰かがこれに対する解決策を持っていますか?

注:私は例としてC-bを使用していますが、以下に適切な解決策があります。私はC-Spaceを使用していますが、少し複雑です。

1
Richard Wonka

はい、<C-b>(tmuxプレフィックス)に続いて[hjkl]を使用してペインを変更し、\を使用して前のペインに移動するために、キーバインディングを再マップすることができます。

Vimとtmuxの両方で設定する必要があることに注意してください。

これらのキーバインディングの Vim構成 は次のとおりです。

let g:tmux_navigator_no_mappings = 1

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

それらの行を.vimrcに追加します。

そして、.tmux.confで、 スニペット (TPMではない)を使用して構成し、メインバインディングを次のように変更します。

bind-key h if-Shell "$is_vim" "send-keys C-b h"  "select-pane -L"
bind-key j if-Shell "$is_vim" "send-keys C-b j"  "select-pane -D"
bind-key k if-Shell "$is_vim" "send-keys C-b k"  "select-pane -U"
bind-key l if-Shell "$is_vim" "send-keys C-b l"  "select-pane -R"
bind-key \ if-Shell "$is_vim" "send-keys C-b \\" "select-pane -l"

(要するに、C-の部分と、プレフィックスなしで実行されるようにする-nを削除します。次に、send-keysを更新して、Vimが期待しているものと同じキーを送信します。 、プレフィックス付き。)

copy-mode-viキーバインディングも更新することをお勧めしますが、そのモードでは「プレフィックス」が有効になっていないため、どのキーを使用するかは明確ではありません...そのことを検討することをお勧めします。

2
filbranden