背景
Vimでタブを使うこと自体賛否両論ありそうだが、自分は大体以下の流れでよく使う。
- 編集し始める
- 関連ファイルをsplitで開き続ける
- ウィンドウが小さくて文字が見えなくなる
- 仕方ないので C-wTでファイルを別タブに開く(全画面になるのでうれしい)
かなり雑にタブを開くので、タブがいくつあるか、どのタブになにが入っているかは把握していない。:set showtabline=0
と設定する程度にタブに関心がない。
計画性がないため「やっぱりこのバッファはこっちのタブに移して、このファイルとsplitで並べて編集したい」とか事後で思うことが頻繁にある。
そこで表題の「編集中のバッファを他のタブに移したい」が発生する。
困った
Vim標準のコマンドだと編集中のバッファを他のタブに移すのは、意外とスムーズにはできないことが分かった。インターネット上で紹介されているやり方をみると以下のようなものがあった。
- 事前にsplitしてから C-wTする
- たしかにそうすれば後から開き直したくなることはないが、そもそもそこまで計画性がないのが問題
- また新たに開かれたタブに旧タブ内のバッファを移したい時など、柔軟に対応できない
- 開きたいときに
:b
コマンドで都度開く- ファイル名に関心がないため、パッとファイル名をタイプできない
- そもそもパッと出てきたとしても、それなりに手間である
- 未保存のバッファも散らかす癖があり、それらはファイル名で指定できない
- タブをマージするプラグインを使う
- タブに関心がないため、どのタブをマージすればいいかを指定できない
- またユースケースとしては、タブの内一部の「バッファを移動したい」ことが多く、「タブをマージする」というアクションとは微妙に一致しない
どれも自分のやりたいこととは異なり、困った。
困りに対する対応
自分のニーズが特殊なようなので、結局プラグインを作った。
https://github.com/gitusp/yanked-buffer
設計としてはかなりシンプルで、以下のようになっている:
- 既存のウィンドウを閉じるコマンド(C-wq)を拡張し、隠されたバッファの
bufnr
を記憶しておくようにする - ↑で記憶した
bufnr
を開くコマンドを提供する(C-wQが空いてたので、自分はそれに割り当てている)
結果バッファの操作が快適になり、より計画性が不要になった。
副次的ではあるが、間違ってウィンドウを閉じてしまった時とかにも復元が楽になった。