这里可能更容易使用示例。我有一个函数ss
,它只调用:
sudo systemctl $argv
Tab 补全功能在完整命令中可以正常工作,但在ss
函数中则不行。例如,
ss start mys<tab>
尝试从文件系统完成,而不是使用命令的完成功能systemctl
。
答案1
经过一番研究,似乎 fish 中有两个即将推出的功能,但它们都不在当前的稳定版本 (2.1.1) 中。
第一个是和--wraps
的参数,它启用完成继承。给出为注册的所有完成。function
complete
function foo --wraps=bar
foo
bar
第二种是通过abbr
命令使用缩写,其工作原理与 vim 缩写非常相似。abbr -a gco='git checkout'
注册一个缩写gco
以扩展为git checkout
。 键入gco
后跟空格或回车键会扩展缩写,这自然允许任何已注册的完成工作。
如果没有这些功能,那么唯一剩下要做的事情就是为你的函数/别名编写自定义完成脚本,这很愚蠢。