我正在尝试使用 gf 带括号的文件路径,如下所示 $(env_var)/aaa/bbb/foo.txt
尽管我设置了 isfname 但似乎 vim 将其视为空格 设置 isfname -=(,)
当我像下面这样使用 isfname 时,似乎括号本身被 vim 读取但不起作用 设置 isfname +=(,)
有什么方法可以在括号内使用 gf 和 env var 吗?
要对
gf
进行更复杂的替换,您可以使用 includeexpr
。它为 gf
提供了后备,如 :help gf
中所述。
首先,您需要向
isfname
添加括号,就像捕获 $(env_var)
所做的那样
然后你可以编写一个微小的替换函数。
要仅在 makefile 上使用它,您应该将以下代码放入
~/.vim/after/ftplugin/make.vim
:
setlocal isfname+=(,)
setlocal includeexpr=substitute(v:fname,'\\$(\\(.\\{-}\\))','\\=getenv(submatch(1))','g')
这将查看光标下方的文件名,并将字符串
$(env_var)
替换为 getenv(env_var)
的结果。正则表达式看起来有点吓人,因为反斜杠必须转义两次。它大致相当于 $(.*)
并非贪婪地捕获括号内的任何内容作为子匹配。然后将该子匹配输入到 getenv()
。
:help 'includeexpr'
和 :help substitute()
以供参考。
请记住,当您编辑和运行文件时,
env_var
可能具有完全不同的值。
更正统的替代方案是在
env_var
指向 path
选项的地方添加。