我换成了嘚并发现它比狂欢,但我有一个问题哦我的天啊的(以下简称“奥美拉唑“) 自动完成功能。
当我输入时git chec
,OMZ 将其补全为git check
;狂欢它完成到git checkout
。我在远程分支方面也遇到了问题: ori
完成到oriG
,并orig
到origin
,在狂欢它完成了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 插件知道这些别名并且接下来仍然会完成分支和标签名称!