いろんな人の.vimrcを見ていて気になった関数がありました。expand()という関数。.vimrcで
let g:rsenseHome = expand('~/.vim/ref/rsense-0.3')
と書いていて気になったのです。Vimのドキュメントを見たら書いてありました。Vim documentation: eval
expand()は、シェルの持っている変数や環境変数を展開することができる。しかしシェルを起動しなければならないので、遅くなる。|expr-env-expand|を参照。展開された変数はファイル名のリストのように扱われる。環境変数を展開できないときはそのままになる。よって “:echo expand(‘$FOOBAR’)” の結果は “$FOOBAR” となる。
なるほど。シェルでexport FOOBAR="foobar"
としていた場合、:echo expand('$FOOBAR')
の結果はfoobar
となります。また、上記の例にあるようにホームディレクトリを表す~
も展開してくれます。例えばホームディレクトリが/user/takayukiatkwsk
の場合、:echo expand('~/.vim/ref/rsense-0.3')
の結果は/user/takayukiatkwsk/.vim/ref/rsense-0.3
となります。expand()
を通さないとチルダが展開されずに文字列として解釈されます。
なぜ調べたかというと、最初は以下のようにexpand()
を通さずに設定していたのですがこれだとrsenseの起動がうまくいかなかった、という失敗があったのでした。
" ダメな例
let g:rsenseHome = '~/.vim/ref/rsense-0.3'