• Tips
  • What Are the Vim Buffers, Windows, Tabs?

What Are the Vim Buffers, Windows, Tabs?

Vim には紛らわしい概念として、バッファ、ウィンドウ、タブというものがあります。これらの違いがめっちゃわかるようになります。 また、この話は vim と nvim で共通です。

Buffers

はじめに、Vim でファイルを開くと、そのファイルの内容がファイルバッファにロードされます。 この、メモリ内に読み込まれたファイル内容のことをバッファといいます。

Vim では編集を行なうと、このバッファに変更を書き込み、:w をしたときにその内容が実際のファイルに書き込まれるというフローを用いています。

また、neo-tree などのファイルでないけど Vim に表示されているものは、実は表示したいものをダミーファイルの中身としてバッファに読み込ませています。つまり Vim に表示されるものはすべてバッファに読み込まれたものと言うことになります。

Windows

このバッファを Vim で表示させるときに枠になるのが Window です。ウィンドウはファイルの中身などは関係なく、それを表示させる場所のことです。

例えば:vsplit (short :vs) というコマンドはウィンドウを横に新しく作成するというコマンドです。 また、:split (short :sp) で縦に新しく作成できます。

この新しく開いたウィンドウの中でどのバッファを読み込むかを選択するためには :edit <file-name> (short :e)としてファイル名を指定して開くか、:buffer <buffer-id> としてバッファ ID を指定します。バッファ ID を知るためには :ls コマンドが有用です。

Tabs

今開いているウィンドウの配置を保存したものがタブです。つまり、今:vsなどで開いたウィンドウたちをすべて合わせて一つのタブです。

新しいタブを開くには :tabnewtabedit (short :tabe) とします。こうすると、先程までのウィンドウたちがタブ1に残り、何も開いていない新しいタブ 2 が作成されます。

先程のタブに戻るには gt(increment) か gT(decrement) というキーバインドで動くことができます。タブ 1 に戻ると、先程まで開いていたウィンドウの配置とバッファが戻って来ます。

タブは、今編集してる画面の形を壊さずに他のファイルを一瞬開きたいときなどにとても使いやすいです。

ウィンドウに相当する機能までは他の IDE にもあると思いますが、タブ相当の機能があるものは少なくとても嬉しい仕様だと思います。(Vivaldi のタブグループっぽいかな?)

タブは bufferline を使用する場合は右上に数字が表示されて、クリックで切り替えることもできます。

Session

おまけ

コマンドラインから nvim と打って新しく起動した neovim のプロセスをセッションと呼びます。別のシェルを開いて新しく nvim を起動した場合それらは別のセッションということになります。

セッションで開いているバッファ・ウィンドウ・タブの配置は :mksession というコマンドですべてを記録したファイルを作成することが可能です。

次回 nvim を開いたあとにこの作成したファイルを読み込み直すことで、このときのファイル等の配置をすべて復活することができます。

ちなみに閉じる前に配置を保存して、次回起動時に自動で復元をしてくれるプラグインを作りました。(宣伝)20-utility-config/autosession

Last updated on September 24, 2022