Vimのステータスラインを表示/非表示にするlaststatusの設定
他の人のvimrcを見ていて、ステータスラインの見た目が自分の環境と違うことに気づきました。原因は表示内容ではなく、そもそも表示するかどうかの条件を決めるlaststatusという設定でした。
| 値 | 動作 |
|---|---|
0 | 常に非表示 |
1 | ウィンドウが2つ以上のときだけ表示 |
2 | 常に表示 |
3 | 画面全体で1本を共有(Neovim限定) |
laststatusの3つの値
:set laststatus=0 " 常に非表示
:set laststatus=1 " ウィンドウが2つ以上のときだけ表示
:set laststatus=2 " 常に表示
ウィンドウを1つしか開いていないときにステータスラインが出ていないと感じたら、laststatus=1になっている可能性が高いです。分割していないときは非表示、分割した瞬間に表示、という挙動になります。
VimとNeovimでデフォルトが違う
Vimのデフォルトは1ですが、Neovimのデフォルトは2で常に表示されます。加えてNeovim 0.7以降では3という値も使えるようになっていて、これはウィンドウを分割していても画面全体で1本のステータスラインを共有する設定です。分割時にステータスラインが何本も並ぶのが煩わしい場合は試す価値があります。
:set laststatus=3 " Neovim限定。画面全体で1本を共有
表示内容も一緒にカスタマイズできる
laststatusは表示するかどうかの条件だけを決める設定で、実際に何を表示するかはstatuslineオプションで別途指定します。たとえばファイル名・変更フラグ・カーソル位置を表示したい場合は次のように書けます。
set statusline=%F\ %m\ [%l/%L]
%Fがファイルパス、%mが変更フラグ(未保存なら[+])、%l/%Lが現在行/全行数を表します。laststatusで表示条件を決め、statuslineで中身を決める、という役割分担を理解しておくと、他の人のvimrcを読むときにも迷いにくくなります。
設定ファイルに書いておく
laststatusはその場でコマンドとして打つよりも、vimrcやinit.luaに書いておくのが普通の使い方です。一時的に借りたサーバーなど、設定ファイルを持ち込めない環境で操作するときにだけ、その場で打つ機会があると考えられます。
laststatusの値を疑います。Neovimなら3で分割時の見た目もすっきりします。
Vimのデフォルト(laststatus=1)に慣れていたところ、Neovimに移ってから常時表示になっていることに気づかず、しばらく「なぜか毎回ステータスラインが出ている」と勘違いしていました。デフォルト値がエディタによって違うことを知らないと、こういう地味な混乱が起きます。
まとめ
laststatusは0/1/2の3段階(Neovimは3も)でステータスラインの表示条件を切り替えられます。VimとNeovimでデフォルトが異なる点だけ覚えておけば、見た目の違いに戸惑うことはなくなります。