![如何以编程方式访问 zsh 补全?](https://linux22.com/image/89367/%E5%A6%82%E4%BD%95%E4%BB%A5%E7%BC%96%E7%A8%8B%E6%96%B9%E5%BC%8F%E8%AE%BF%E9%97%AE%20zsh%20%E8%A1%A5%E5%85%A8%EF%BC%9F.png)
zsh 有一个补全系统,通过按 Tab 激活:
llama@llama:~$ git st<Tab>
Completing main porcelain command
stash -- stash away changes to dirty working directory
status -- show working-tree status
Completing plumbing internal helper command
stripspace -- filter out empty lines
我所能弄清楚的是,这来自脚本/usr/share/zsh/functions/Completion/Unix/_git
,其中_git
调用了完成命令。
假设我知道完成函数的名称(例如_git
),如果我输入某个字符串并按下制表符,我如何获得会发生什么的输出?本质上,我正在尝试接受前任的输入。git st
并获取上面的输出(以编程方式,从脚本)。
答案1
这可以通过使用zsh 捕获完成。存储库的 README.md 文件提供了几个示例:
capture.zsh 'vim -'
capture.zsh 'vim --'
capture.zsh 'vim --r'
capture.zsh 'echo *('
capture.zsh 'scp hostname:'
请注意,包本身声明它是概念证明,因此在执行过程中可能包含错误。