Vimのタブ操作まとめ 開く・閉じる・切り替える、ブラウザ風キーバインドも
Vimのタブはブラウザのタブと似ているようで、閉じたときの挙動がだいぶ違います。慣れるまでは「閉じたつもりのファイルが裏で開いたまま」に何度か遭遇することになります。基本コマンドと、詰まりやすい点を整理します。
| コマンド | これだけ覚える |
|---|---|
:tabnew | 新しい空のタブを開く |
:tabclose | タブを閉じる(バッファは残る) |
:tabnext / :tabprevious | 次/前のタブへ切り替え |
:tabs | タブとウィンドウの一覧を見る |
:tabdo | 開いている全タブに同じコマンドを実行 |
タブを開く
:tabnew
:tabedit
:tabe
この3つはほぼ同じ意味で、空のタブを新しく開きます。特定のファイルを指定して開きたい場合は:tabedit {file}のようにパスを続けます。
タブを閉じる
:tabclose
ここが最初にハマりやすいポイントです。:tabcloseでタブそのものは消えますが、そこに表示されていたバッファは隠れ状態として残り続けます。タブとバッファは別階層にあるので当然の挙動ですが、「ファイルを閉じたつもり」でいると:lsを見て驚くことになります(詳しくはバッファ・ウィンドウ・タブの違いを参照)。バッファごと消したいなら:bdeleteを別途実行する必要があります。
そのタブの最後のウィンドウであれば:qでも閉じられますが、これも見かけ上タブが消えるだけで、バッファが終了するわけではない点は変わりません。
タブを切り替える
:tabNext
:tabPrevious
一覧を確認したいときは:tabsを実行します。
ブラウザ風のキーバインドにする
タブ操作をWebブラウザに近い感覚で行いたい場合は、vimrcに次のようなマッピングを追加します。
nnoremap <C-t> :tabnew<CR>
nnoremap <C-Tab> :tabnext<CR>
nnoremap <C-S-Tab> :tabprevious<CR>
nnoremap <C-F4> :bdelete<CR>
<C-w>をタブを閉じるキーに割り当てたくなりますが、ウィンドウ分割の操作プレフィックスとして頻繁に使うキーと衝突するため避けたほうが安全です。バッファを閉じる操作は<C-F4>のような別のキーに寄せておくと事故が少なくなります。空いているキーを探したいときは未割り当てキーの一覧が参考になります。
全タブへの一括操作
すべてのタブに同じ処理をしたい場合は:tabdoを使います。
一括置換
よく使うのは全タブでの一括置換です。
:tabdo %s/検索語/置換語/gi
ファイルの読み込み・再読み込み
タブをまたいでファイルを読み込みたい場合や再読み込みしたい場合も、同じ要領で書けます。
:tab read ファイルパス
:tab e!
タブ・ウィンドウ・バッファをまたいだ一括処理は他にも多くのパターンがあるので、まとめて使いたい場合はwindo/bufdo/tabdoの記事を参照してください。
開いているバッファを一括でタブに変換する
:bufdo tab split
開いている全バッファを、それぞれ独立したタブとして開き直せます。複数ファイルをバッファとして開いていたが、途中からタブ単位で見比べたくなった、という場面で使えます。ただし、この方法で開いたタブを閉じるときは:bdeleteでバッファ自体を削除する必要がある点は変わりません。実用場面はそれほど多くありませんが、「今どのファイルを開いているか」を一覧しやすくする一時的な整理術として覚えておくと便利です。
:tabcloseはタブを消すだけでバッファは残ります。ファイルごと閉じたいなら:bdeleteを使います。この区別さえ押さえておけば、タブ操作でつまずくことはほぼなくなります。
ブラウザ風のキーバインドを入れてから、複数ファイルを見比べる作業が明らかに速くなりました。ただし<C-w>をタブ閉じるキーに割り当てたときは、ウィンドウ分割の操作が全部潰れてしまい1日で元に戻しました。既存の機能と衝突しないキーを選ぶのは思ったより大事でした。
まとめ
タブの基本操作自体はシンプルですが、「閉じる」の意味がバッファとは異なる点だけ最初に理解しておくとつまずきにくくなります。ブラウザ風のキーマッピングを足せば、タブを主体にした編集スタイルもかなり快適になります。