我正在尝试向vim添加autocmd,只要我在某个子目录中打开文件并设置搜索路径,就会执行该操作。不幸的是,路径名扩展似乎不适用于set命令。
具体来说,我希望在我的vimrc中有这样的一行:
setlocal path+=**;%:p:h
但这只会给我字面意义。只是呼叫expand()
也不起作用。有没有办法让变量扩展在这里工作?
答案 0 :(得分:4)
怎么样:
execute 'setlocal path +=**;' . fnameescape(expand('%:p:h'))
答案 1 :(得分:3)
不需要扩展当前文件的目录;只需将.
添加到path
即可。来自帮助:
- 要相对于当前文件的目录进行搜索,请使用:
:set path=.
答案 2 :(得分:2)
使用
let &l:path.=(empty(&l:path)?(''):(',')).'**;'.escape(expand('%:p:h'), ',\*; ')
。这比使用:execute 'setlocal path'
更清晰,特别是知道fnameescape()
旨在逃避命令的路径,而不是选项,我可以说在这里使用它并不是真的安全:它肯定不会去转义逗号和分号并为空格添加额外的转义(一个用于转义为:set
,一个用于选项本身)。 (empty(&l:path)?(''):(','))
来模仿set+=
的行为。