我对 vim 很陌生,我很难理解 vim 脚本的一些微妙之处。具体来说,我在使用需要不带引号的字符串的命令时遇到了麻烦(是否有名称?)。例如
cd some/unquoted/string/path
问题是我想传递一个变量,但调用
let pathname = 'some/path'
cd pathname
将尝试将当前目录更改为 'pathname' 而不是 'some/path'。解决此问题的一种方法是使用
let cmd = 'cd ' . pathname
execute cmd
但这似乎有点迂回。 This StackOverflow question实际使用
cd
带有变量,但它在我的系统上不起作用(“a:path”被视为上述路径)。我正在使用
cd
作为一个具体的例子,但这种行为不是 cd
独有的;例如,edit
命令也以这种方式运行。 (这种类型的命令有名字吗?)
最佳答案
TL;博士 :使用 execute 'cd' fnameescape(pathname)
说明 :许多将文件名作为参数的基本命令支持反引号语法:
command `shell command`
或者
command `=vim_expression`
所以你的例子可以写成
cd `=pathname`
如果您在受控环境中运行它。您不得在插件中使用此变体 因为 a) 有
&wildignore
可能会妨碍您的设置:set wildignore=*|cd =pathname
将使cd
无论 pathname
中存储了什么都失败b) 如果路径名包含换行符,它将被分成两个或多个目录。因此,对于要共享的任何代码段,您应该使用的是
execute 'cd' fnameescape(pathname)
请注意,您不得使用 execute "cd" pathname
因为它不关心路径名中的特殊字符(例如,空格)。
关于Vim: `cd` 到存储在变量中的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4596932/