问题描述
我正在使用zsh。
我有一个命令foo
,我使用alias foo="sudo foo"
作为快捷方式。我希望zsh就像输入foo
一样完成命令。
我在Google上搜索了compdef _foo f=foo
,可以对其进行处理。当我输入f something<tab>
时,补全工作正常。但是,当我先尝试compdef _foo foo=foo
然后再尝试foo something<tab>
时,它将无法正常工作。
当我使用与原始命令同名的别名时,是否可以处理制表符完成?
解决方法
问题实际上是我身上发生的一种特殊情况。
正如@blueray所说,zsh能够正常完成let counter = 0;
function test(n) {
counter <= 50 ? proba(c.log(counter++)) : null;
}
test(80);
之类的命令或别名。
由于@rcwnd_cz,我发现添加sudo foo
解决了我的问题。关键是我在将setopt complete_aliases
映射到sudo
的其他地方设置了别名。结果,sudo FOO=bar
是“别名别名”,而zsh拒绝完成它。设置alias foo="sudo foo"
可以完美解决。