我的vimrc中有以下命令:

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()

评论


非常感谢! /与Windows上GVim的文件路径中的\相同吗?

– Tamlok
2015年11月4日4:13



是的,但是要注意fnameescape()和shellescape()之间的区别。在Vim的命令行上传递参数时使用前者,这样就不会被Vim烦扰。在将参数传递给外部命令时使用后者,以免外壳破坏它们。在Windows上也有shellslash,如果您需要与!command和朋友打交道,它将对您头上的头发数量产生重大影响。

–佐藤桂
2015年11月4日,下午5:53

#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