2024年4月18日木曜日

Vim の実行バイナリからその Vim のバージョンを確認したい

今使っている Vim のバージョン(e.g., 9.1.0342) を、 Vim の実行バイナリから取得する方法のメモ。

1 行で

vim -Es +"let vl=v:versionlong | put =printf('%d.%d.%04d', str2nr(vl[0]), str2nr(vl[1:2]), str2nr(vl[3:])) | print | q!"

目的

「最新リリースと比較して、新しいものがあれば再ダウンロードする」というのをやりたい。

Vim を、Windows で使ったり、 dev container に転送して使ったりしているため、ポータブルな形で配布されている Vim をよく利用しており、 利用している Vim のバージョンを更新しようとしたときに、「今ここにあるこのバイナリのバージョンはいくつだ?」をシェルスクリプトから確認したくなった。

そのためにはコマンドラインから Vim を起動し、バージョン番号を標準出力へ出力してもらわなければいけない。

ポータブルな形で配布されている Vim の例:

前提

動作確認環境は以下。

バージョン取得方法の説明

vim -Es +"let vl=v:versionlong | put =printf('%d.%d.%04d', str2nr(vl[0]), str2nr(vl[1:2]), str2nr(vl[3:])) | print | q!"
  • Vim の起動オプションの話
    • -E: Vim を「拡張 Ex モード」で起動
    • -s: サイレントモード。「Ex モード」「拡張 Ex モード」での実行時に、一部コマンドの実行結果以外を標準出力へ出力しないようにする
      • 標準出力されるコマンドは以下
        • print
        • list
        • number
        • set
  • Vim script の話
    • v:versionlong: パッチレベルを含めたバージョン文字列(9.1.0000 の場合 9010000 となる)
    • printf: C 言語と同じフォーマットで整形できる関数。前述の v:versionlong の桁を切り取ってフォーマットするのに利用
    • str2nr: 文字列を数値に変換する関数
    • put: バッファに文字を出力。 put =print...(略) で、 print の戻り値をバッファへ出力している
    • print: バッファの、現在のカーソルがある行を標準出力する
    • q!: 現在のバッファを破棄して Vim を終了する

参考資料

0 件のコメント:

コメントを投稿