Vimのステータスラインを表示/非表示にするlaststatusの設定
他の人のvimrcを見ていて、ステータスラインの見た目が自分の環境と違うことに気づきました。原因は表示内容ではなく、そもそも表示するかどうかの条件を決めるlaststatusという設定でした。
| 値 | 動作 |
|---|---|
0 | 常に非表示 |
1 | ウィンドウが2つ以上のときだけ表示 |
2 | 常に表示 |
3 | 画面全体で1本を共有(Neovim限定) |
目次(9項目)
laststatusの3つの値
:set laststatus=0 " 常に非表示
:set laststatus=1 " ウィンドウが2つ以上のときだけ表示
:set laststatus=2 " 常に表示
ウィンドウを1つしか開いていないときにステータスラインが出ていないと感じたら、laststatus=1になっている可能性が高いです。分割していないときは非表示、分割した瞬間に表示、という挙動になります。
laststatus=2 で分割したところ。ウインドウごとにステータス行が出る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=3 が変えるもの
Neovim 0.7で入った laststatus=3 は、ウィンドウごとにステータスラインを描くのをやめて、画面の一番下に1本だけ表示する設定です。ウィンドウを3つ4つと分けても、境界に太い帯が並ばなくなります。
そのぶん、表示されるのはカーソルのあるウィンドウの情報だけになります。分割した各ウィンドウのファイル名を常に見ておきたい人には向きません。分割を多用するかどうかで好みが分かれる設定です。
set laststatus=3 " Neovim 0.7以降のみ
:set fillchars+=stl:─ " 帯の代わりに引く線を指定する
ウィンドウの境目が分からなくなる
laststatus=0 にすると、ウィンドウを分割したときに境目が見えなくなります。ステータスラインが境界線を兼ねているためです。
それでも消したいなら、fillchars で境界に引く文字を指定すると区切りが見えます。分割をほとんど使わず、画面を1行でも広く使いたい人向けの設定だと考えてください。
ステータスラインを消すとメッセージも見えにくくなる
ステータスラインの下には、コマンドの入力やメッセージを出す行があります。これは cmdheight という別のオプションで、laststatus とは独立しています。
:set cmdheight? " 既定は1
set cmdheight=2 " 長いメッセージで「続けるには」を出さない
長いメッセージが出るたびに「続けるにはENTERを押してください」と聞かれて煩わしいときは、cmdheight=2 にすると収まることが多くなります。逆に画面を広く使いたいなら、Neovim 0.8以降は cmdheight=0 も選べます。表示内容そのものの書き方は文字コードの表示で扱っています。
まとめ
laststatusは0/1/2の3段階(Neovimは3も)でステータスラインの表示条件を切り替えられます。VimとNeovimでデフォルトが異なる点だけ覚えておけば、見た目の違いに戸惑うことはなくなります。