特定のサブディレクトリでファイルを開くたびに実行され、検索パスを設定するautocmdをvimに追加しようとしています。残念ながら、パス名の展開は set コマンド内では機能しないようです。
具体的には、vimrc に次のような行を追加したいと考えています。
setlocal path+=**;%:p:h
しかし、これは私に文字通りの値を与えるだけです。電話するだけexpand()
でもダメです。ここで変数展開を機能させる方法はありますか?
特定のサブディレクトリでファイルを開くたびに実行され、検索パスを設定するautocmdをvimに追加しようとしています。残念ながら、パス名の展開は set コマンド内では機能しないようです。
具体的には、vimrc に次のような行を追加したいと考えています。
setlocal path+=**;%:p:h
しかし、これは私に文字通りの値を与えるだけです。電話するだけexpand()
でもダメです。ここで変数展開を機能させる方法はありますか?
どうですか:
execute 'setlocal path +=**;' . fnameescape(expand('%:p:h'))
現在のファイルのディレクトリを展開する必要はありません。に追加.
するだけで十分path
です。ヘルプから:
- 現在のファイルのディレクトリを基準にして検索するには、次を使用します。
:set path=.
使用する
let &l:path.=(empty(&l:path)?(''):(',')).'**;'.escape(expand('%:p:h'), ',\*; ')
. これは、オプションではなくコマンドのパスをエスケープするように設計され:execute 'setlocal path'
ていることを特に知っているfnameescape()
ため、ここで使用するのは実際には安全ではないと言えます。コンマとセミコロンをエスケープして、追加のエスケープを追加することは絶対にありませんスペース (1 つは のエスケープ用:set
、もう 1 つはオプション自体用)。(empty(&l:path)?(''):(','))
の動作を模倣するためにここにありset+=
ます。