execute "set path+=".getcwd()."/**"
如果当前的工作目录类似于
/home/tamlok/my_work/
,它将很好地工作。但是,如果目录包含空格,例如D:\Program Files\vim\
,vim会抱怨。有经验的vimmer在这里会做什么?另一个问题是Windows中的
substitute()
。如果\
得到getcwd()
,我是否需要将D:\Program Files\vim\
转义为\
或将其替换为\
? br可以吗?任何帮助表示赞赏!非常感谢!#1 楼
您正在寻找的功能是fnameescape()
。它会转义给定字符串中的所有特殊字符,这些字符串包含与当前操作系统的标准相匹配的文件路径。有关更多信息,请参见
:help fnameescape()
#2 楼
我有同样的问题。尝试仅在路径中使用/
,并使用\
这样的空格进行转义。例如,我在vimrc中添加以下行:命令
:echo &rtp
可以看到:set rtp=C:/Program\ Files\ (x86)/Vim/vim74/vim.exe
请注意,这里在空格之前没有
\
。评论
非常感谢!但是,我从函数调用中获得了路径。所以我认为我无法控制路径中的分隔符。正如所选答案所建议的那样,此处需要转义功能。
– Tamlok
16-12-28 at 14:21
@tamlok,很抱歉,但是我还没有使用功能-您比我更聪明:-)分享您的知识,当您找到答案时,请)
–乔治·兰兹(George Lanetz)
17年1月14日在17:04
嗨,EvergreenTree的答案只是问题的关键! :) 谢谢!
– Tamlok
17年1月16日在2:10
@tamlok,我对Google中“ evergreentree”一词的搜索结果感到困惑。也许,我对你的理解不正确。
–乔治·兰兹(George Lanetz)
17年1月17日在11:20
嗨,EvergreenTree是StackExchange的用户,并在此问题中发布了答案。请看上面。 :)
– Tamlok
17年1月18日在1:20
评论
非常感谢! /与Windows上GVim的文件路径中的\相同吗?
– Tamlok
2015年11月4日4:13
是的,但是要注意fnameescape()和shellescape()之间的区别。在Vim的命令行上传递参数时使用前者,这样就不会被Vim烦扰。在将参数传递给外部命令时使用后者,以免外壳破坏它们。在Windows上也有shellslash,如果您需要与!command和朋友打交道,它将对您头上的头发数量产生重大影响。
–佐藤桂
2015年11月4日,下午5:53