14

我在 zsh 选项卡完成时遇到问题: 运行后:

autoload -U compinit
compinit

文件的 Git 选项卡完成不再起作用。例如,如果我键入 git add my_f 来完成 my_file,则什么也不会发生。zsh git 补全似乎只适用于 git 分支和标签。

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

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

4

2 回答 2

10

(我在这里添加一个答案主要是为了将其从未回答的列表中删除。)

正如您从评论中看到的那样,它确实有效。我相信整个 zsh 的情况最近也有了显着改善:

提交 06f44c3cc5ca5eca638f300a518c65aa98d26d6d

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

完成:与 zsh 兼容

修改 git-completion.bash 使其在使用 bashcompinit 时也可以与 zsh 一起使用。...

所以,如果你遇到这个谷歌搜索,并且你的完成不起作用,请尝试升级你的git-completion.bash(链接指向来自 git.git HEAD 的 blob)。当前的 git 版本是 1.7.3.2;它应该进入下一个。

于 2010-11-04T14:40:54.663 回答
0

请注意,在 Git 2.30(2021 年第一季度)中,zsh 的命令行完成指令(在 contrib/ 中)已更新。

请参阅Alexey ( ) 的提交 3ebd945(2020 年 7 月 2 日(由Junio C Hamano 合并 -- --bbdbe08 提交中,2020 年 11 月 2 日)ogonkov
gitster

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

警告:在 Git 2.30(2021 年第一季度)中,Zsh 自动补全(in contrib/)已被修补,正如其作者“ Felipe Contreras ”在此处所述。

See commit af806a2 , commit 441ecda , commit 8030684 , commit 5a364d2 , commit 35a4170 , commit bbd7f45 , commit 2769e56 , commit 9d76052 , commit 9a397ea , commit 46af9b3 , commit 5d64fb2 , commit cf6ce01 , commit 35e29fb , commit ecaf798 , commit 2f459b0 , commit 94b2901 , commit a7804a1提交 3791968提交 aa1f1f8提交 162f1a5提交 bed6356提交 81f717b提交 ea625a3提交 98fc268(2020 年 10 月 27 日),提交 44b37ab提交 cb9dcbd提交 2c7cdc5提交 5eb25bc提交 4ce2b51(2020 年 10 月 24 日),作者Felipe Contreras ( felipec)
(由Junio C Hamano 合并 -- gitster--提交 4560eae中,2020 年 11 月 9 日)

completion: bash: 移除 zsh 包装器

签字人:费利佩·孔特雷拉斯

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

是时候继续前进了。


在 Git 2.30(2021 年第一季度)中,有一个针对最近损坏的修补程序。

请参阅Felipe Contreras ( ) 的提交0764964 ( 2020 年 12 月 5 日)和提交 c5dd0c8(2020 年 11 月 30 日(由Junio C Hamano 合并 -- --commit 7d92da3中,2020 年 12 月 8 日)抄送:SZEDER Gábor签字人:Felipe Contreras签字人:Junio C Hamanofelipec
gitster

completion: bash: 修复 gitk 别名回归

很久以前,当_git_completehelper 被引入时,_gitk被替换为__gitk_main,并且一个用于向后兼容指向的占位符__git_wrap_main_gitk被保留在原地。

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

不幸的是,提交 b0a4b2d257(“ completion:添加对向后兼容性的支持”,2012-05-19,Git v1.7.11-rc0 -- merge_gitk )错过了对in的调用的先前实例_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直接调用。

然后,在提交 441ecdab37 (" completion: bash: remove old compat wrappers", 2020-10-27, Git v2.30.0 -- merge listed in batch #4 )_gitk中被删除,这会触发以下错误:

_git_gitk:9: command not found: _gitk  

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


使用 Git 2.34(2021 年第四季度),更新到 tcsh 的命令行补全(在 contrib/ 中)。

请参阅Takashi Iwai ( ) 的提交 ff7b83f(2021 年 8 月 18 日(由Junio C Hamano 合并——提交 4c3bddb中,2021 年 9 月 3 日)tiwai
gitster

completion: tcsh: 通过删除包装函数来修复回归。

署名:岩井崇史

bash 完成中旧的兼容包装器的清理导致仍然使用它们的 tcsh 完成的回归。
让我们也更新 tcsh 调用站点以解决它。

修复:441ecdacompletion:bash:删除旧的兼容包装器,2020-10-27,Git v2.30.0-rc0 -批次 #4中列出的合并)(“完成:bash:删除旧的兼容包装器”)

于 2020-11-09T19:33:32.493 回答