我正在尝试从 vim cd 到我项目的 git root 中,以便我的 Ctrl-P 正常工作。我经常在项目中工作,我不希望 Ctrl-P 查找 git root,所以我将它设置为仅查找最近的文件夹,并带有.gitignore.
在命令行上,我可以执行类似的操作,cd $(git rev-parse --show-toplevel)但是当我在 vim 中尝试相同的操作时,:!cd $(git rev-parse --show-toplevel)它会隐藏 vim 并仅显示空白输出。有人告诉我!在 vim 命令行中将允许我运行 bash 命令。我是不是错过了什么。
您可以使用反引号来运行 shell 命令并将输出通过管道传输到 Vim 命令中,例如:cd:
:cd %:h | cd `git rev-parse --show-toplevel`
Run Code Online (Sandbox Code Playgroud)
这会将当前目录设置为当前文件的目录,然后:cd使用git rev-parse --show-toplevel命令中的 git 目录运行。
或者,如果您使用fugitive.vim,则可以使用该:Gcd命令。
如需更多帮助,请参阅:
:h :cd
:h backtick-expansion
:h :bar
Run Code Online (Sandbox Code Playgroud)
一种方法是:
:exec 'cd' fnameescape(fnamemodify(finddir('.git',
\ escape(expand('%:p:h'), ' ') . ';'), ':h'))
Run Code Online (Sandbox Code Playgroud)
这escape(..., ' ')是封闭所必需的finddir()。 fnameescape()确保cd不会抱怨特殊字符。