Blogaomu

WEBアプリケーション開発とその周辺のメモをゆるふわに書いていきます。

Vimのexpand()関数

いろんな人の.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'