在zsh

问题描述

我正在使用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"可以完美解决。