たけっぱ横丁

the technical document for Vim(Editor), Natural Language Proecssing(NLP) tools and Programming(Python, Ruby, C++ etc).

VimとTmuxをシームレスに移動する

VimとTmuxをシームレスに利用するためのプラグイン.

今日は, tmux + vimユーザならば入れておくべきであろう vim-tmux-navigatorをご紹介させていただきます.

vim-tmux-navigator

このプラグインを入れるとシームレスにtmuxとvimを移動できるようになります 私はCtrl+hjklで, vimのバッファを移動できるように設定しているのですが

このプラグインを入れることで, 同じキーでvimのバッファだけでなく tmuxのペインも移動できるようになります.

正直かなり便利です.

preview

Install

NeoBundleを利用しているならば
.vimrcに以下の設定を追加しましょう

NeoBundle 'christoomey/vim-tmux-navigator'

Configuration

# Smart pane switching with awareness of vim splits
is_vim='echo "#{pane_current_command}" | grep -iqE "(^|\/)g?(view|n?vim?)(diff)?$"'
bind -n C-h if-shell "$is_vim" "send-keys C-h" "select-pane -L"
bind -n C-j if-shell "$is_vim" "send-keys C-j" "select-pane -D"
bind -n C-k if-shell "$is_vim" "send-keys C-k" "select-pane -U"
bind -n C-l if-shell "$is_vim" "send-keys C-l" "select-pane -R"
bind -n C-\ if-shell "$is_vim" "send-keys C-\\" "select-pane -l"

C-hjklに限らず 自由にマップが可能です.

 nnoremap <silent> {Left-mapping} :TmuxNavigateLeft<cr>
 nnoremap <silent> {Down-Mapping} :TmuxNavigateDown<cr>
 nnoremap <silent> {Up-Mapping} :TmuxNavigateUp<cr>
 nnoremap <silent> {Right-Mapping} :TmuxNavigateRight<cr>
 nnoremap <silent> {Previous-Mapping} :TmuxNavigatePrevious<cr>

Advanced Configuration For Nested tmux

僕はtmuxをローカルPC と リモートPC で それぞれ立ち上げているため, tmuxをネストして利用することが多いです.

以下のような設定を加えると ローカルのtmuxとvim, リモートのtmuxとvimの4つでシームレスに移動が可能になります!

is_vimorssh='echo "#{pane_current_command}" | grep -iqE "(^|\/)g?(view|n?vim?|ssh)(diff)?$"'
bind -n C-h if-shell "$is_vimorssh" "send-keys C-h" "select-pane -L"
bind -n C-j if-shell "$is_vimorssh" "send-keys C-j" "select-pane -D"
bind -n C-k if-shell "$is_vimorssh" "send-keys C-k" "select-pane -U"
bind -n C-l if-shell "$is_vimorssh" "send-keys C-l" "select-pane -R" 
bind -n C-\ if-shell "$is_vimorssh" "send-keys C-\\" "select-pane -l"