在这种情况下(我假设它在oh-my-zsh的 git 插件中gc
定义)在内部用实际命令( )替换别名( ),然后再寻找完成。这适用于每个别名(除非设置了 shell 选项,这将允许为别名设置单独的完成)。alias gc='git commit -v'
zsh
gc
git commit -v
COMPLETE_ALIASES
至于你想要做什么:看到-w
它实际上是一个函数而不是别名,你确实必须编写自己的完成。但是有一个更简单的方法来解决它:静态命名目录。
命名目录通常只是系统上用户的主目录。最常见的可能~
是当前用户的主目录。其他用户目录命名为~USERNAME
. 您还可以定义自己的静态命名目录。有两种方法可以做到这一点:
哈希 -dw=~/workspace
- 通过定义一个字符串 shell 参数来隐式定义它,该参数的值以 an 开头
/
(这也意味着您不能用~
作主目录的快捷方式)
w="${HOME}/工作区"
在这两种情况下,您现在都可以使用~w
来引用您的工作区,在第二种情况下,您也可以使用$w
(例如用于引用的字符串)。打字cd ~w/a-repo
会让你到~/workspace/a-repo
. 制表符补全的工作方式与任何其他路径一样,因此按下~w/a<Tab>
会将您显示~w/a-repo
为补全。
此外,如果您设置 shell 选项 AUTO_CD ( setopt AUTO_CD
),则只需键入路径(或目录名称)即可切换到目录,而无需cd
.
% w="/tmp"
% cd ~w
% pwd
/tmp
% mkdir 1 2 3
% setopt AUTO_CD
% ~w/<TAB>
1 2 3
% ~w/1
% pwd
/tmp/1