vim cd'ing 到 git root

ada*_*eck 4 git vim

我正在尝试从 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 命令。我是不是错过了什么。

Pet*_*ker 7

您可以使用反引号来运行 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)

  • `:Gcd` 也正是我想要的。我正在使用逃犯,所以它适用于我的情况。我投了赞成票,但选择了佐藤的答案,因为它适用于那些没有逃犯的人。 (2认同)

Sat*_*ura 4

一种方法是:

:exec 'cd' fnameescape(fnamemodify(finddir('.git',
    \ escape(expand('%:p:h'), ' ') . ';'), ':h'))
Run Code Online (Sandbox Code Playgroud)

escape(..., ' ')是封闭所必需的finddir()fnameescape()确保cd不会抱怨特殊字符。