【一人 vimrc advent calendar 2017】vimrc で起動時にのみ実行するスクリプトを記述する【6日目】

一人 vimrc advent calendar 2017 6日目の記事になります。

vimrc環境変数などに追記する設定を記述する

さて、以前『vimrc で安全に autocmd を設定する』記事でも書いたのですが、vimrc は再読込される可能性を考慮する必要があると書きました。
同様に、例えば次のように『環境変数に追記するような設定』を行う場合も注意する必要があります。

" $PATH にパスを追記する
let $PATH = $PATH . ";" . "/path/to/hoge"

上記のように『任意の(環境)変数に対して値を追記する』というような場合、『vimrc を(再)読込する度』に値が追記されてしまいます。

has('vim_starting') を使用する

このような場合 has() 関数を利用します。
has() は『Vim で任意の機能がサポートされているかどうかを確認する』ための関数ですが、has('vim_starting') と呼び出すことで『Vim の初期化中(起動中)では真を返す』というような挙動になります。
これを利用することで以下のように『起動時にのみ処理を実行する』というようなことができます。

" has('vim_starting') は起動時にのみ真を返す
if has('vim_starting')
   " 起動時にのみ処理が行われる
    let $PATH = $PATH . ";" . "/path/to/hoge"
end

まとめ

  • has('vim_starting') を利用することで起動時にのみ実行される処理を記述できる
  • vimrc は再読込される可能性を考慮して設定しよう(2回目)
    autocmd もそうですが、このような意図しない挙動はエラーなど出るわけではないので注意して行う必要がありますね。