📝

Vimでタブを閉じたときに左側のタブを開く

2021/07/31に公開

Vimで:tabeditすると新しいタブが右側に開くが、
:tabcloseすると元々いたタブの右側のタブが開く。
これを閉じたタブの左にあったタブが開かれるようにしたい。
つまり| 1 | 2 | 3 |のようにタブがあって、2を閉じたら3ではなく1を開く。
1で作業中に2を開いて閉じたら1の作業に戻りたいことが多い。

実装

以下のようにautocmdで実現できる。

let s:after_tab_leave = v:false
augroup activate_left_tab
  autocmd!
  autocmd TabEnter * let s:after_tab_leave = v:false
  autocmd TabLeave * let s:after_tab_leave = v:true
  autocmd TabClosed * call s:activate_left(expand('<afile>'))
augroup END

function! s:activate_left(tab_number) abort
  let current = tabpagenr()
  if s:after_tab_leave && current != 1 && current == a:tab_number
    tabprevious
  endif
endfunction

少し意外なことにTabClosedだけでは実現できない。
-tabclose+tabcloseなど今いるタブ以外を閉じる方法があるため、
TabClosedの前にTabLeaveが起きているかを確認する必要がある。

一応同じ機能をプラグインとして管理している (これはNeovim用)
https://github.com/notomo/wintablib.nvim/blob/6eadb926963ef5a3cf93138ed4230fcfe198dca4/doc/wintablib.nvim.txt#L18-L19

感想

タブを閉じるキーマッピングを差し替えるタイプの方法と異なり、
タブで開いた:terminalの終了時にも元のタブに戻れるのが嬉しい。
寿命の短いタブを多用する人間なので地味に快適になった。

Discussion