2017-08-24 61 views
0

比方说,我想编写一个自定义shell完成函数,仅在git checkout <tab>上触发。我可以写一个自定义的钩git完成这样的:如何为多字词前缀编写shell完成钩子?

complete -f -F _custom_completion_function git # bash 
compctl -f -K _custom_completion_function git # zsh 

但是,这将覆盖所有现有git的bash/zsh中完成的;我只想改变git checkout的行为。

实现此目标的最佳策略是什么?

+0

一个非常简单的解决方案包括在定义'混帐checkout'的别名,添加你想要的compspec的别名,使用别名来代替'git的checkout'。 –

+0

我不确定'bash'和'zsh'解决方案是否足够相似以保证在同一个问题中包含这两个解决方案。 – chepner

回答

0

这很大程度上取决于您现有的git完成设置。在决定要做什么时,机会已经在命令行上检查了第一个字。如果第一个单词是“checkout”,它不能只调用一个单独的函数。

对于zsh,我建议不要使用古代的compctl完成系统。如果您使用较新的系统(通过运行autoload -U compinit; compinit),则zsh附带的git完成功能允许您定义自己的_git-checkout函数。定义它,它将优先于一个zsh includes。