Vimのプラグインの vim-fugitive で関数の変更がありvimrcがうまく動かなくなっていたので直した話。
vim-fugitive
Gitな操作をVim内で行うためのプラグイン。
コマンドラインモードで!Git <sub-command>で通常のgitコマンドが使えます。
:Git commitとかはファイル名を指定しなければ今開いているファイルを指定したことになります。
それ以外にも:Gdiffsplitという現在編集中のファイルの変更前のファイルとの違いをvim diffで
表示してくれるような独自コマンドもあります。
個人的によく使うのは
:Git blame:blameを開く:Gdiffsplit: 現在開いているファイルの変更前の状態との比較をdiffで開く
:Git blameなんかは以前、Gblameというコマンドでできるようになっていましたが、現在これを呼ぶと
:Gblame has been removed in favor of :Git blame
というエラーが出るようになっています。
fugitive#head()の削除
fugitive#head()という関数があって、これを呼ぶと現在居るレポジトリのブランチ名を呼び出すことができていました。
これがちょっと前に削除されて、現在はFugitiveHead()という関数がその動作をします。
:echo FugitiveHead()
とすればmainなどと表示されます。
もしくはfugitive#Head()と大文字にしても一応呼べます。
で、この関数自体は2年以上前に実装されていたみたいですが、
互換性を持たせるためにfugitive#head()もずっと残してくれていた感じで、
それがつい先日削除されました。
正確には関数は残ってますがこれを呼ぶと
:echo FugitiveHead()
以下の様なエラーが出ます。
Error detected while processing function fugitive#head:
line 1:
E605: Exception not caught: Third party code is using fugitive#head() which has been removed. Change it to FugitiveHead()
lightline用の表示の調整
このhead関数をlightlineというステータスラインに色々と表示させるためのプラグインの設定で使っています。
こんな感じの設定。
ずいぶん昔に作った設定ですが、 まだ結構そのまま残ってます。
で、このfugitiveをlightlineで使う設定はlightlineのREADMEにもあるんですが、
2年位前にfugitiveの変更を取り入れてREADMEでもFugitiveHeadを使うようにドキュメントが変更されてました。
vim-fugitive has changed APIs · Issue #417 · itchyny/lightline.vim
というわけでfugitive#headをFugitiveHeadに変更しておきます。
実際自分の設定では
let g:ll_fugitive = exists('*fugitive#head) ? fugitive#head() : ''
みたいに関数が存在するかチェックして、なければ無視する設定にしてたんですが、 元の関数を残してエラーを吐くように変更してくれたので気づけました。
そうでなければステータスラインにブランチ名が出なくてもおそらく長いこと気づかなかったのでは、と。。。
