我已经通过 Homebrew 安装git
了git-flow
。我在 Mac 上。
我有zsh 5.0.2 (x86_64-apple-darwin12.4.0)
git
完成工作正在进行。git-flow
完成工作未完成。
我无法git flow
完成工作。
我尝试了两种方法来安装这些功能。
方法 1
我git-flow
使用 Homebrew 安装,它将功能添加到此目录/usr/local/share/zsh/site-functions
这条路在我的$fpath
> echo $fpath
/usr/local/share/zsh/site-functions /usr/local/Cellar/zsh/5.0.2/share/zsh/functions
方法 2
我git-flow
从https://github.com/zsh-users/zsh-completions并将文件放入~/.zsh/completions
。
然后我将目录添加到我的~/.zshrc
fpath=(~/.zsh/completions $fpath)
> echo $fpath
/Users/jord/.zsh/completions /usr/local/share/zsh/site-functions /usr/local/Cellar/zsh/5.0.2/share/zsh/functions
这两种方法都不起作用。
我究竟做错了什么?
更新
的输出git-flow [CTRL+X] [h]
是:
> git flow
tags in context :completion::complete:git::
all-files (_files _default _git (eval))
更新2
正在起作用!
我把_git
函数从@mpy 提供的 URL并~/.zsh/completions/
添加~/.zsh/completions
到我$fpath
的~/.zshrc
。
fpath=(
~/.zsh/completions
$fpath
)
然后我git-flow-completion.zsh
从https://github.com/bobthecow/git-flow-completion并将其放入~/.zsh/completions
并从我的文件中获取该文件.zshrc
。
git
并且git flow
完成工作现在正在进行,但我不知道为什么?!
答案1
该文件$fpath/_git-flow
提供了(带破折号)的补全git-flow
,见其第一行:
#compdef git-flow
因此,使用git-flow [CTRL+X] [h]
我得到
$ git-flow [CTRL+X] [h]
tags in context :completion::complete:git-flow::
argument-1 (_arguments _git-flow)
tags in context :completion::complete:git-flow:argument-1:
commands (_describe _git-flow)
显示zsh
检测到提示现在位于的第一个参数git-flow
。
的完成函数git
是非常强大(说实话,我无法“读完”它),因此git flow
(无破折号)也提供了git-flow
完成,但上下文不同:
$ git flow [CTRL+X] [h]
tags in context :completion::complete:git::
argument-rest (_arguments _git)
tags in context :completion::complete:git-flow::
argument-1 (_arguments _git-flow _call_function _git)
tags in context :completion::complete:git-flow:argument-1:
commands (_describe _git-flow _call_function _git)
如果使用不存在的 git 模块,我最终会得到
$ git foo [CTRL+X] [h]
tags in context :completion::complete:git::
argument-rest (_arguments _git)
tags in context :completion::complete:git-foo::
directories (_files _git)
globbed-files (_files _git)
all-files (_files _git)
看起来与您的结果最接近。
因此我的建议是:
- 检查你的
_git-flow
完成文件是否损坏,有正确的行尾(EOL) 使用例如触发 git-flow 的完成
git-flow [CTRL+X] [h]
并查看输出which _git-flow
:如果无法读取完成函数,则会导致
$ which _git-flow _git-flow () { # undefined builtin autoload -XUz }
如果读得正确,你将得到打印的函数:
$ which _git-flow _git-flow () { local curcontext="$curcontext" state line typeset -A opt_args _arguments -C ':command:->command' '*::options:->options' ...
尝试用 编译
_git-flow
函数文件,zcompile _git-flow
看看是否会出错。(然后_git-flow.zwc
应该在自动加载时读取生成的文件。)- 检查
~/.zcompdump
是否_git-flow
列出了完成情况。
答案2
我认为你可以尝试这个: https://github.com/Homebrew/homebrew-core/commit/f710a1395f44224e4bcc3518ee9c13a0dc850be1#r30789420
你运行的是 macOS 吗?Homebrew git 自带的自动完成功能与 git-flow 自动完成脚本冲突。
尝试删除 zsh 文件夹/usr/local/Cellar/git/x.xx.x/share/
并重新加载 zsh。
参考文献:
1.https://github.com/Homebrew/homebrew-core/commit/f710a1395f44224e4bcc3518ee9c13a0dc850be1
2.https://github.com/bobthecow/git-flow-completion/issues/50
3.https://github.com/robbyrussell/oh-my-zsh/issues/1717