🙈

Vimでコミットメッセージ編集時にstatusの一部を非表示にする

2022/12/06に公開

git commit時にコミットメッセージを編集するためにエディタが展開されます。
このとき、画面下側に各ファイルのstatusとdiffが表示されますが、コミット対象のファイルの情報はともかく、コミット対象外のファイルのstatusまで表示されなくても良い気がします。

ということで、Vim(Neovim)向けに、不要な範囲を非表示にする(折りたたむ)設定を紹介します。
以下をftpluginに設定してください。

after/ftplugin/gitcommit.vim
call cursor(1, 1)
silent! /Changes not staged for commit:\|Untracked files:/,/--- >8 ---/fold
旧版
after/ftplugin/gitcommit.vim
call cursor(1, 1)
let fold_pattern = 'Changes not staged for commit:\|Untracked files:'
let fold_from = search(fold_pattern, 'n')
if fold_from
  execute fold_from .. ',/--- >8 ---/fold'
endif

当初はこのようにsearch()がヒットするかチェックしてエラー回避していましたが、silent!を使うほうが簡単でした。

Changes not staged for commitまたはUntracked filesから、diffの始まりの ✂️ マークまで[1]を折りたたみます。
rangeにパターンを指定できることを利用しています。パターンが見つからない場合(ここでは、すべての変更をステージングしている状態)のエラーはsilent!で止めています。
範囲を変更したい場合は適宜パターンを調整してみてください。


Changes not staged for commitからハサミマークまで(画像の赤枠部分)が自動で折りたたまれる

脚注
  1. statusに表示されているファイル名に--- >8 ---が含まれていると折りたたみ範囲がおかしくなります。まあ普通はそんな名前のファイル作らないよね ↩︎

Discussion