Git的标签自动完成对于小型项目非常有用,但我目前正在处理两个使用git的大型项目,在这些项目中,它比没有用还糟糕。例如,每当我输入git add forms<tab>
时,git需要20秒或更长时间才能找到该文件(在这个例子中是forms.py),在此期间我不能在终端做任何其他事情。有没有办法关闭自动完成功能,或者使其更快?
Git的标签自动完成对于小型项目非常有用,但我目前正在处理两个使用git的大型项目,在这些项目中,它比没有用还糟糕。例如,每当我输入git add forms<tab>
时,git需要20秒或更长时间才能找到该文件(在这个例子中是forms.py),在此期间我不能在终端做任何其他事情。有没有办法关闭自动完成功能,或者使其更快?
这不是git自动完成文件名的问题,而是你的shell的问题。当你输入"cat forms< tab >"时是否也有同样的延迟?
查看此帖子以了解类似问题:
http://talkings.org/post/5236392664/zsh-and-slow-git-completion
此帖子建议在你的.zshrc中添加以下内容:
__git_files () {
_wanted files expl 'local files' _files
}
编辑:这是那个帖子的原始文本
我发现有很多关于大型代码库中git自动补全速度缓慢的投诉帖子。有各种建议的补丁和建议加载最新的zsh。也许其中一些东西会起作用,但我真正想要的是它能够像文件系统中的分支和文件名一样完成名称。我没有找到任何如何获得这种行为的建议,所以我自己想出了解决方法。我认为我应该分享这个方法给任何可能从中受益的人。我只需将以下内容添加到我的.zshrc文件中:
__git_files () { _wanted files expl 'local files' _files }
现在我可以运行git命令,并且获得接近即时的完成,同时还能获得类似于ls提供的文件完成。
最终受够了zshell自动完成功能极其缓慢,开始寻找解决方案。我最终选择使用已经和oh my zsh一起安装的'gitfast'插件代替'git',现在速度非常快...
https://github.com/robbyrussell/oh-my-zsh/wiki/Plugins#gitfast我对zshell没有任何经验,但是我在另一个论坛上找到了这个答案。你需要在你的.zshrc文件中包含以下这一行:
compdef -d git
~/.zsh/_git
中。然后将其放置在您的fpath中。fpath=(~/.zsh $fpath)
现在你应该会飞了。
正如这里的另一个评论所解释的那样;另一个选择是使用oh-my-sh并启用gitfast插件,它可以达到同样的效果。
Zsh开发人员为什么要坚持使他们的代码变慢呢?我不知道,但在这里你可以看到他们推理的一个示例:关于git完成速度问题的回复。
gitfast
插件和antidote,看起来已经启用了。
但是如果我不把mv /usr/share/zsh/5.9/functions/Completion/Unix/_git /usr/share/zsh/5.9/functions/Completion/Unix/_bugit
移开,git checkout feature/<TAB>
仍然慢得要命...有什么解决办法吗? - undefined/usr/local/git/contrib/completion/git-completion.bash
git-completion.bash
。
set -x
就足够展示/证明哪个自动完成需要太长时间了。 - MarcHgit-completion.bash
的第一行是:为 Git 核心提供 bash/zsh 自动补全支持
。 - MarcH