vim cd';对git根进行初始化

vim cd';对git根进行初始化,git,vim,Git,Vim,我正试图从vim将cd刻录到项目的git根目录中,以便Ctrl-p正常工作。我经常在project中工作,我不希望Ctrl-P查找git根目录,因此我将其设置为只查找最近的文件夹,其中包含.gitignore 在命令行上,我可以执行类似于cd$(git rev parse--show top level)的操作,但是当我在vim中使用尝试同样的操作时:!cd$(git rev parse--show toplevel)它隐藏了vim,只显示一个空白输出。有人告诉我!在vim命令行中,我可以运行b

我正试图从vim将cd刻录到项目的git根目录中,以便Ctrl-p正常工作。我经常在project中工作,我不希望Ctrl-P查找git根目录,因此我将其设置为只查找最近的文件夹,其中包含
.gitignore


在命令行上,我可以执行类似于
cd$(git rev parse--show top level)
的操作,但是当我在vim中使用
尝试同样的操作时:!cd$(git rev parse--show toplevel)
它隐藏了vim,只显示一个空白输出。有人告诉我!在vim命令行中,我可以运行bash命令。我遗漏了什么。

您可以使用backticks来运行shell命令,并将输出导入Vim命令,如
:cd

:cd %:h | cd `git rev-parse --show-toplevel`
这将当前目录设置为当前文件的目录,然后从
git rev parse--show toplevel
命令使用git目录运行
:cd

或者,如果使用,可以使用
:Gcd
命令

有关更多帮助,请参阅:

:h :cd
:h backtick-expansion
:h :bar
一种方法是:

:exec 'cd' fnameescape(fnamemodify(finddir('.git',
    \ escape(expand('%:p:h'), ' ') . ';'), ':h'))

转义(…,“”)
对于封闭的
finddir()
是必需的
fnameescape()
确保
cd
不会抱怨特殊字符。

:!cd
:cd
不同。另外,Vim不知道
$(…)
,而是使用
system()
。更好的方法是,使用类似于
:exec'cd'fnameescape(fnamemodify(findfile('.gitignore',escape(expand('%:p:h'),'.';'),':h'))的方法,而不是运行
git
。谢谢。我将
findfile
更改为
finddir('.git')
,因为在本例中,我不想找到.gitignore文件,而是要找到整个项目的git根。如果你真的回答这个问题,我会接受的。否
fnameescape()
。淘气,淘气
:Gcd
也正是我想要的。我使用的是逃犯,所以在我的情况下它是有效的。我投了赞成票,但选择了佐藤的答案,因为它适用于那些没有逃犯的人。@SatoKatsura,你是对的
:Gcd
适用于当前文件
%
。但是,如果您是特例,它也会起作用。Re:
逃犯
:当然,但是如果您从项目目录开始,则不需要
:Gcd
<代码>逃犯
内部异常混乱…
:echo
正在寻找有效的表达式。使用backticks运行shell命令只在查找文件的vim命令上有效,例如
:find
。请参见
:h反勾选扩展
:h表达式
。您可能正在查找
:pwd
getcwd()
。e、 g.
:echo getcwd()