Vimのバッファ一覧(:ls)の読み方と絞り込み方
:lsを実行すると、開いているバッファが記号付きで一覧表示されます。この記号を読み解けるようになると、今どのバッファがどんな状態にあるかが一目で把握できるようになります。
目次(7項目)
バッファ一覧を表示する
:ls
:buffers
:files
いずれも同じ内容が表示されます。出力はこのような形式になります。
1 #h "config.lua" line 1
2u "asdf" line 0
3 %a + "main.py" line 12
記号の意味
| 記号 | 意味 |
|---|---|
u | リストされていないバッファ |
% | カレントウインドウにあるバッファ |
# | 代替バッファ(:e #やCtrl-^で使われる) |
a | アクティブバッファ(ロード済み・表示中) |
h | 隠れバッファ(ロード済みだが非表示) |
- | 変更不可('modifiable'オフ)のバッファ |
= | 読み取り専用のバッファ |
+ | 変更のあるバッファ |
x | 読み込みエラーのあるバッファ |
記号を組み合わせて読む
先頭の数字はバッファ番号で、Vim起動中は一意に保たれます。この番号を使えば:b14のように指定してバッファを切り替えられます。記号は複数同時に並ぶことがあり、組み合わせで状態を読み取ります。
%+:変更が未保存のカレントバッファ#h:隠れ状態の代替バッファ
同じ桁の記号(aとhなど)は互いに排他的で、同時には表示されません。
%(今いる場所)、#(さっきいた場所)、+(未保存の変更あり)の3つ。絞り込んで表示する
バッファ数が増えてくると一覧も見づらくなります。状態を指定して絞り込めます。
1 h "config.lua"
2 #h + "main.py"
3 %a "asdf"
:ls +2 #h + "main.py"
:ls + " 変更されたバッファのみ
:ls a " アクティブバッファのみ
:ls u " リストされていないバッファも含めて表示
複数の記号を組み合わせると「AND」条件になる点に注意が必要です(「OR」ではありません)。例えば:ls h+は「変更された隠れバッファ」だけに絞り込みます。逆に、通常表示されないリストされていないバッファまで含めて全部見たいときは、末尾に!を付けます。
:ls!
:buffers!
バッファ番号を使った切り替え
一覧の先頭に表示される番号は、Vimを起動している間ずっと一意に保たれます。この番号を使えば、ファイル名を思い出せなくても瞬時にバッファを切り替えられます。
:b 14
:buffer 14
番号を正確に覚えていなくても、コマンドライン補完で部分一致するバッファ名を絞り込めるので、番号よりファイル名の一部を使う方が実用的な場面も多いです。
:b config
ファイル名で絞り込む
状態ではなくファイル名(パス)で絞り込みたい場合は:filterと組み合わせます。
:filter /\.vim/ ls
:filter /config/ ls
正規表現の部分一致で判定されるので、拡張子やディレクトリ名の一部だけでも絞り込めます。:oldfilesの絞り込みと同じ:filterの使い方なので、あわせて覚えておくと応用が利きます。
複数の設定ファイルを同時に開いて作業しているとき、:ls +で「保存し忘れているバッファ」だけを毎回確認する癖をつけてから、うっかり閉じて変更を失うことがなくなりました。記号を全部覚える必要はなく、+と%と#の3つを押さえておけば実務では十分だと感じています。
まとめ
:lsの記号は一見複雑ですが、%・#・+の3つを押さえれば実用上は困りません。バッファが増えて見づらくなったら、状態指定や:filterで絞り込めば解決します。