AIでVim Scriptを学んだ

私はVimを使っています。以前は、「Vimがよくわからない。VimScriptよくわからない。」と思ってました。でもAIに聞きつつわかったことがたくさんあります。そのメモを共有します。

Vimは2種類の設定がある

Vimの設定ファイルには、上から順に実行される指定と、イベント駆動の指定があります。

  • 上から順に実行される指定
    • setやキーマップの指定がこれに対応します。
    • Vimの起動時に一回だけ実行されます。
  • イベントに対する指定
    • autocmdがこれに対応します
    • ファイルを開いたとき、保存したとき、など特定のタイミングで実行される指定です。

この二つがあることを理解しておくのが大切で、基本的には、set で全体の設定を整えて、autocmd でファイルタイプや操作ごとの挙動を差し込む、という構造のようです。

そもそも、Vimは起動時に .vimrc を読み込みます。 .vimrcは設定ファイルと呼ばれていますが、実態は、Vim Scriptで書かれたプログラムです。Vimにおいて、設定ファイルとプログラムは同じ言語です。

イベントに対する処理

VimScriptで、特定のイベントに対する処理を記述するには autocmd を使います。

以下が例です。

autocmd FileType python call s:configure_lsp()
  • autocmd
    • 特定のイベントが起きたら自動実行する処理を示します。
  • FileType
    • イベントの種類を示します。FileTypeは「ファイルタイプが判定されたとき」です
  • python
    • FileTypeに対する引数です。対象のファイルタイプがPythonであるときに動きます
  • call
    • 条件に一致したとき、関数を呼び出すことを示します。
    • 他にも setlocal で直接コマンドを読んだり、execute でExコマンドを実行することもできます。
  • s:configure_lsp()
    • callで、呼ぶ関数名を示します。
    • s: はこのスクリプト内のローカル関数という意味です。

関数を書く

Vim Scriptで関数を書くには次のようにします。

function! MyFunc(arg1, arg2)
      " 処理
      return result
  endfunction
  • function!
    • 関数の定義を開始します。
    • ! は同名関数の上書き許可します。ないと再読み込み時にエラーになります。
  • MyFunc
    • 関数名を示します。
    • s:MyFunc のようにs: をつけると、そのファイル内でのみ有効になります。
  • arg1, arg2
    • 引数を示します。
    • 関数内で引数を参照するときは a: をつける

実際に使用例は以下です。

function! s:greet(name)
  echo 'Hello, ' . a:name
endfunction

call s:greet('mtb')
" => Hello, mtb

キーマップを設定する

Vimでは特定のキーを押すと特定の処理を実行する、という設定ができます。キーマップです。

その設定例も紹介します。

以下が一つの例です。これを解説します。

nnoremap <buffer> gQ :<C-u>LspDocumentFormat<CR>

これは 「バッファの中では、gQ を押すと、LSPにフォーマットを依頼する」 という設定です。

  • nnoremap
    • ノーマルモードのキーマッピングを定義します。
    • キーを押すと別のキーに連鎖させたい場合は、 nmap が使えます。
    • <buffer>
      • 今開いているバッファだけに有効であることを示します。
      • 例えば、FitleType pythonで呼ばれると、Pythonファイルだけに適用される、など
    • gQ
      • このキーを押したら…、の指定です。
    • :<C-u>LspDocumentFormat<CR>
      • : でコマンドラインモードに入ります
      • <C-u>で入力済みの範囲指定(数字とか)をクリアします。
      • LspDocumentFormatというコマンドを実行します。
      • <CR>は、Enterを押すことを示し、実行を確定します。

まとめ

色々と説明しましたが、今ではClaudeCodeに設定ファイルを渡せばいい感じに読み込んでくれますし、色々教えてくれます。

過去に個人でVimScriptを学んだ際はなかなか理解できなくて辛かったのですが、AIを使えば簡単に学べて嬉しかったので、記事にしておきました。この活動が誰かの参考になれば幸いです。

類似投稿

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です