如何使用zsh compinit启用git文件选项卡完成?

时间:2009-10-29 10:49:24

标签: git file tabs zsh zsh-completion

我的zsh标签完成有问题:运行后:

autoload -U compinit
compinit

文件的Git选项卡完成不再起作用。例如,如果我输入git add my_f来完成my_file,则没有任何反应。 zsh git完成似乎只适用于git分支和标记。

没有compinit的东西,git文件完成工作,但当然我错过了所有花哨的分支完成的东西。

那么......有没有办法在zsh中同时完成git文件的完成和git分支的完成?这对我很有帮助。

2 个答案:

答案 0 :(得分:10)

(我在这里添加一个答案主要是为了让它脱离未答复的清单。)

从评论中可以看出,它确实有效。我相信整个zsh情况最近也有了显着改善:

  

提交06f44c3cc5ca5eca638f300a518c65aa98d26d6d

     

日期:星期一9月6日08:33:19 2010 -0400

     

完成:与zsh兼容

     

修改git-completion.bash,以便在使用bashcompinit时也可以使用zsh。 ...

所以,如果你发现这个谷歌搜索,并且你的完成工作无效,请尝试升级你的git-completion.bash(链接指向git.git HEAD的blob)。目前的git版本是1.7.3.2;它应该进入下一个。

答案 1 :(得分:0)

请注意,在Git 2.30(Q1 2021)中,zsh的命令行完成指令(以contrib /格式)已更新。

请参见commit 3ebd945Alexey (ogonkov)(2020年7月2日)。
(由Junio C Hamano -- gitster --commit bbdbe08中合并,2020年11月2日)

completion:修复zsh安装说明

签名人:Alexey
作者:Stefan Haller

  • 在完成配置中修复错误的脚本。 zsh想要bash完成路径在这里,而不是它自己的路径。
  • 添加compinit自动加载命令,因为如果未加载,整个程序将无法正常工作。

所以命令应该是:

# The recommended way to install this script is to make a copy of it in
# ~/.zsh/ directory as ~/.zsh/git-completion.zsh and then add the following
# to your ~/.zshrc file:
#
#  fpath=(~/.zsh $fpath)
#  autoload -Uz compinit && compinit

警告:如in here的作者“ Felipe Contreras”所述,在Git 2.30(第2021年第1季度)中,对Zsh自动完成(contrib/中)进行了修补。

请参见commit af806a2commit 441ecdacommit 8030684commit 5a364d2commit 35a4170commit bbd7f45commit 2769e56,{{3} },commit 9d76052commit 9a397eacommit 46af9b3commit 5d64fb2commit cf6ce01commit 35e29fbcommit ecaf798commit 2f459b0commit 94b2901commit a7804a1commit 3791968commit aa1f1f8commit 162f1a5commit bed6356commit 81f717bcommit ea625a3(10月27日2020),以及commit 98fc268之前的commit 44b37abcommit cb9dcbdcommit 2c7cdc5commit 5eb25bccommit 4ce2b51(2020年10月24日)。
(由Felipe Contreras (felipec)Junio C Hamano -- gitster --中合并,2020年11月9日)

commit 4560eae:bash:删除zsh包装器

签名人:Felipe Contreras

它已经被弃用八年多了,它从未更新过,而且维护起来很麻烦。

是时候继续前进了。


使用Git 2.30(第2021年第1季度)时,有一个针对近期损坏的修补程序。

请参见completion前的commit 0764964(2020年12月5日)和commit c5dd0c8(2020年11月30日)。
(由Felipe Contreras (felipec)Junio C Hamano -- gitster --中合并,2020年12月8日)
抄送:SZEDERGábor 签名人:Felipe Contreras 签名人:Junio C Hamano

commit 7d92da3:bash:修复gitk别名回归

很久以前,当引入_git_complete帮助器时,_gitk__gitk_main所代替,并且向后指向__git_wrap_main_gitk的向后兼容性占位符被保留了。 / p>

调用“ __git_complete gitk __gitk_main”时,创建了__git_wrap__gitk_main帮助器,基本上就是“ __git_func_wrap __gitk_main”加complete选项。

不幸的是completion(“ completion:增加了对向后兼容性的支持”,2012-05-19,Git v1.7.11-rc0-commit b0a4b2d257)错过了以前的实例在_gitk

中调用_git_gitk

因此,基本上我们有了__git_wrap__git_main -> __git_func_wrap __git_main -> __git_complete_command gitk-> _git_gitk-> _gitk-> __git_wrap__gitk_main -> __git_func_wrap __gitk_main -> __gitk_main

永远不需要两次调用__git_func_wrap。 由于_git_gitk总是在包装器内部调用,因此可以直接调用__gitk_main

然后,在merge(“ completion:bash:删除旧的Compat包装器”中,2020-10-27,Git v2.30.0 - commit 441ecdab37在{{3 }})_gitk已删除,这会引发以下错误:

_git_gitk:9: command not found: _gitk  

我们调用正确的函数:__gitk_main。

相关问题