vim-users.jp

Hack #10: バッファとウィンドウ

Posted at 2009/05/13
このエントリーをはてなブックマークに追加

Vim を使う上で重要な概念として、バッファとウィンドウがあります。本 Hack ではこれらについてその概要を見ていきます。

バッファ

バッファは、ファイルを編集するための論理的な領域です。Vim で新しくファイルを開くと、新しいバッファが作成されてそこにファイルの内容が読み込まれます。

Vim は起動してから開いたファイル(正確にはバッファ)を(明示的にバッファを削除しない限り)全て覚えています。 別のファイルを編集するために現在のバッファを閉じたとしても、閉じたバッファはバッファリストに記憶されていて、後から簡単に開き直すことができます。

バッファの要素

全てのバッファには番号と名前が付けられて、どちらもバッファを開くときなどバッファを選択する際に利用できます。

バッファ番号
バッファには作成された順に 1 から順に一意のバッファ番号が振られます。バッファ番号はすでにあるバッファを削除したとしても決して再利用されることはありません。
バッファ名
バッファ名は、バッファが編集しているファイル名です。ただし、 などの場合もあります。いずれにしてもバッファ名であると言うことに変わりはありません。このように実際のファイル名ではない場合、保存処理をVimスクリプトで置き換えたり保存自体を禁止したりしてあります。
新しくバッファを開こうとした際、すでに同名のバッファがあった場合は新しいバッファを作らず既存のバッファが開かれます。これにより同名のバッファが複数作成されることはありません。ただし無名バッファだけは特別で複数作ることができます。

バッファの状態

バッファには 3 つの状態があります。

active
バッファがいずれかのウィンドウに表示されています。バッファには編集作業用のメモリが割り当てられています。
hidden
バッファはどのウィンドウにも表示されていませんが、メモリは割り当てられています。
inactive
ウィンドウに表示されておらず、メモリも割り当てられていません。

実は、Vim 上の全てのバッファに対して常にメモリが割り当てられているわけではありません。 ウィンドウに表示されていないバッファはそのファイルの内容を一切記憶していません。再びバッファを表示する際に自動的に読み込まれます。 これにより、大量のファイルを開いても Vim が余計にメモリを使いすぎることはありません。 保存していないバッファを閉じることができず、強制的に閉じると変更が失われるのはこういった理由からです。

ただし、時には編集中の状態を保存せずに閉じたい事もあります。そのために hidden 状態が用意されています。この状態にするには 'hidden' オプション、'bufhidden' オプション、 :hide コマンドを使用します。

ウィンドウ

ウィンドウはバッファを画面に表示するための物理的な領域です。ウィンドウにはバッファの一部(もしくは全体)が表示されます。 ウィンドウには必ず何かしらのバッファの内容が表示されています。例えば、引数を指定せずに Vim を起動すると無名バッファが表示されたウィンドウが表示されます。

ウィンドウの分割

ウィンドウは分割することで複数のウィンドウを 1 つの画面に同時に表示することができます。これは、複数のファイルを同時に表示できるだけでなく、1 つのファイルの複数の箇所を同時に表示できることを意味します。 ウィンドウは垂直方向もしくは水平方向に表示領域の許す限り任意の回数分割できます。水平分割してから垂直分割、のように織り交ぜての分割も可能です。

ウィンドウを分割した Vim

ウィンドウ番号

ウィンドウには識別のために 1 から順に番号が振られます。ただしバッファ番号と違い、ウィンドウが閉じられれば番号は詰められウィンドウの位置が入れ替えられれば番号も位置に応じて振り直されます。ウィンドウ番号の数は常に 1 ~ (ウィンドウ数) です。

まとめ

バッファとウィンドウについて、基本的な部分だけ解説しました。基本のみに絞ったのでやや中途半端になってしまった部分もありますが、バッファとウィンドウに関する事柄は大量にあるのでここだけではとても紹介しきれません。Vim の中核となる要素なので、正しく理解しておく必要があります。

thinca

もどる
blog comments powered by Disqus