Vim: `cd` 到存储在变量中的路径

标签 vim

我对 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/

相关文章:

visual-studio - Visual Studio 中类似 ViM 的搜索突出显示可能吗?

eclipse - 如何在 VIm 中使用 Eclipse 格式化程序配置文件?

vim: 段落上的 gp

vim - 您如何反射(reflect)游标的当前语法范围?

vim - 移动到 VIM 中同一列中包含非空白字符的下一行?

intellij-idea - 使用PhpStorm IdeaVim,我无法使用shift+箭头键来选择单词

comments - 采购.vimrc时的警告消息

vim - 如何做 git add 。与 Fugitive ?

VIM 可视模式 : highlight last 2 chars in each line?

string - 关于连接变量和常量字符串的 vim 脚本