0

我正在尝试向 vim 添加一个 autocmd,每当我在某个子目录中打开文件并设置搜索路径时,它就会执行。不幸的是,路径名扩展似乎在 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()旨在为命令而不是选项转义路径,我可以说在这里使用它并不安全:它绝对不会转义逗号和分号并添加额外的转义空间(一个用于转义:set,一个用于选项本身)。(empty(&l:path)?(''):(','))是来模仿的行为set+=

于 2012-05-16T19:09:01.627 回答