ZSH完成系统能否同时完成多个参数?

时间:2019-11-03 12:42:42

标签: zsh zsh-completion zsh-zle

场景:

假设脚本my_online_searcher <query>打开浏览器,搜索query,其中query可以是多个单词。该脚本还提供了实用程序标记-s <query>,该标记显示了搜索引擎的建议。例如:

$ my_online_searcher -s lion rema
lion remake
lion remake cast
lion remake zoo tycoon 2
lion remake zt2
remake lion king
remastered lion's share
remake lion king 2019
remastered lion king
remake lion king trailer
remaking lion king

所需结果:

用户将输入$ my_online_searcher lion rema[TAB],ZSH完成菜单将提供上述选项。

尝试达到期望的结果:

创建一个小的完成脚本_my_online_searcher,该脚本几乎调用my_online_search -s <query>支持功能来给出选项。像这样:

[...]
completions=(${(f)"$(my_online_searcher -s ${arg} ${words:2})"})
_describe 'suggestions' completions
[...]

这允许转义空格,并允许ZSH将query视为单个参数。

但是,每个单词的补全不允许逐步完成建议。要么重复前面的单词,要么过滤掉不以第一个参数开头的建议(例如$ my_online searcher lion rema[TAB]-> $ my_online_searcher lion remake lion king)。

一个想法是修改完成脚本中的LBUFFER。事实证明这是不允许的,因为ZSH给出了LBUFFER是只读的错误

TL; DR:

是否可以让ZSH完成系统将命令后的所有参数视为可修改的参数?换句话说,我可以在ZSH中同时提议对多个参数的完成吗?

0 个答案:

没有答案