如何为多字前缀编写shell完成挂钩?

时间:2017-08-24 14:28:27

标签: bash shell zsh bash-completion zsh-completion

假设我想编写一个仅在git checkout <tab>上触发的自定义shell完成函数。我可以为git完成编写一个自定义钩子,如下所示:

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

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

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

1 个答案:

答案 0 :(得分:0)

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

对于zsh,我建议不要使用古老的compctl完成系统。如果您使用较新的系统(通过运行DIS CHL(*) QMNAME CONNAME ),则zsh中包含的git完成允许您定义自己的autoload -U compinit; compinit函数。定义它,它将优先于一个zsh包含。