如何在 zsh 中获得 bash 样式的自动完成功能(针对 git 命令)

如何在 zsh 中获得 bash 样式的自动完成功能(针对 git 命令)

我换成了并发现它比狂欢,但我有一个问题哦我的天啊的(以下简称“奥美拉唑“) 自动完成功能。

当我输入时git chec,OMZ 将其补全为git check狂欢它完成到git checkout。我在远程分支方面也遇到了问题: ori完成到oriG,并origorigin,在狂欢它完成了origin/

我和其他用户也有同样的问题git类似的命令checkout

我认为问题是别名由插件添加。我不使用它们,因为我不想习惯它们,但它们会破坏我的自动完成功能。

有什么方法可以获取狂欢自动完成(我知道 Bash 中没有内置自动完成功能)? 或者破解 OMZ 插件的方法,以便它不会在每次更新时崩溃。

答案1

补全以及它的来源可能相当令人困惑。以 Ubuntu 14.04 系统为例:

$ dpkg -L zsh-common | grep git
/usr/share/zsh/functions/Completion/Debian/_git-buildpackage
/usr/share/zsh/functions/Completion/Unix/_stgit
/usr/share/zsh/functions/Completion/Unix/_git
/usr/share/zsh/functions/Completion/Unix/_topgit
/usr/share/zsh/functions/VCS_Info/Backends/VCS_INFO_get_data_git
/usr/share/zsh/functions/VCS_Info/Backends/VCS_INFO_detect_git
/usr/share/zsh/functions/Misc/run-help-git

zsh-common软件包附带 git 补全功能。另一方面,该git软件包还附带了 bash 和 zsh 的补全文件:

$ dpkg -L git | grep compl
/etc/bash_completion.d
/etc/bash_completion.d/git-prompt
/usr/share/bash-completion
/usr/share/bash-completion/completions
/usr/share/bash-completion/completions/git
/usr/share/bash-completion/completions/gitk

其中包含如下文件

$ head -n 5 /usr/share/bash-completion/completions/gitk
# bash/zsh completion support for core Git.
#
# Copyright (C) 2006,2007 Shawn O. Pearce <[email protected]>
# Conceptually based on gitcompletion (http://gitweb.hawaga.org.uk/).
# Distributed under the GNU General Public License, version 2.0.

git 包甚至提供了可以启用的 git 感知提示,无需使用诸如 oh-my-zsh 之类的花哨插件。

总而言之,git 子命令补全可以从你的 shell (zsh) 来完成:

https://github.com/zsh-users/zsh/blob/master/Completion/Unix/Command/_git

来自 git

https://github.com/git/git/tree/master/contrib/completion

或来自诸如 oh-my-zsh 之类的插件。

回到你的问题:git chec你描述的旧的完成行为实际上是有缺陷的。chec仍然含糊不清,正确的完成脚本不应该将其完成为checkout,因为有多个以 开头的子命令chec。 如果你想要那种行为,找出你之前使用过的许多完成脚本中的哪一个,禁用 oh-my-zsh git 插件并继续使用旧的完成脚本。

或者,我建议设置一个别名并习惯它。你可以使用

git config --global alias.co checkout

使git co您的新git checkout- oh-my-zsh 插件知道这些别名并且接下来仍然会完成分支和标签名称!

相关内容