0

特定のサブディレクトリでファイルを開くたびに実行され、検索パスを設定するautocmdをvimに追加しようとしています。残念ながら、パス名の展開は set コマンド内では機能しないようです。

具体的には、vimrc に次のような行を追加したいと考えています。

setlocal path+=**;%:p:h

しかし、これは私に文字通りの値を与えるだけです。電話するだけexpand()でもダメです。ここで変数展開を機能させる方法はありますか?

4

3 に答える 3

4

どうですか:

execute 'setlocal path +=**;' . fnameescape(expand('%:p:h'))
于 2012-05-14T16:31:37.530 に答える
3

現在のファイルのディレクトリを展開する必要はありません。に追加.するだけで十分pathです。ヘルプから:

  • 現在のファイルのディレクトリを基準にして検索するには、次を使用します。
    :set path=.
于 2012-05-14T19:30:20.600 に答える
2

使用する

let &l:path.=(empty(&l:path)?(''):(',')).'**;'.escape(expand('%:p:h'), ',\*; ')

. これは、オプションではなくコマンドのパスをエスケープするように設計され:execute 'setlocal path'ていることを特に知っているfnameescape()ため、ここで使用するのは実際には安全ではないと言えます。コンマとセミコロンをエスケープして、追加のエスケープを追加することは絶対にありませんスペース (1 つは のエスケープ用:set、もう 1 つはオプション自体用)。(empty(&l:path)?(''):(','))の動作を模倣するためにここにありset+=ます。

于 2012-05-16T19:09:01.627 に答える