我正在尝试向 vim 添加一个 autocmd,每当我在某个子目录中打开文件并设置搜索路径时,它就会执行。不幸的是,路径名扩展似乎在 set 命令中不起作用。
具体来说,我想在我的 vimrc 中有这样一行:
setlocal path+=**;%:p:h
但这只会给我文字价值。只是打电话expand()
也不行。有没有办法让变量扩展在这里工作?
我正在尝试向 vim 添加一个 autocmd,每当我在某个子目录中打开文件并设置搜索路径时,它就会执行。不幸的是,路径名扩展似乎在 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()
旨在为命令而不是选项转义路径,我可以说在这里使用它并不安全:它绝对不会转义逗号和分号并添加额外的转义空间(一个用于转义:set
,一个用于选项本身)。(empty(&l:path)?(''):(','))
是来模仿的行为set+=
。