Bash 实现对zsh别名的自动补全
我正在使用令人敬畏的zsh框架。每天我点击Bash 实现对zsh别名的自动补全,bash,zsh,bash-completion,oh-my-zsh,zsh-completion,Bash,Zsh,Bash Completion,Oh My Zsh,Zsh Completion,我正在使用令人敬畏的zsh框架。每天我点击gc,它是git commit的别名,我点击,它会给我正确的提交文件。我真的很想知道这是如何实现的,所以我可以实现我自己的想法,使用别名导航到子目录 我的意思是使用这个别名导航到~/workspace/a-repo,它完成了a-repo,并给了我一些建议,这些建议是~/workspace中的文件夹。我已经使用了这个别名,但我需要知道如何添加正确的自动完成/建议 这是我的别名: -w() { cd ~/workspace/"$*" } 在gc(我假设在o
gc
,它是git commit
的别名,我点击
,它会给我正确的提交文件。我真的很想知道这是如何实现的,所以我可以实现我自己的想法,使用别名导航到子目录
我的意思是使用这个别名导航到~/workspace/a-repo
,它完成了a-repo
,并给了我一些建议,这些建议是~/workspace
中的文件夹。我已经使用了这个别名,但我需要知道如何添加正确的自动完成/建议
这是我的别名:
-w() { cd ~/workspace/"$*" }
在
gc
(我假设在oh my zsh的git插件中定义为alias gc='git commit-v'
)的情况下,zsh
在尝试完成之前,在内部用实际命令(git commit-v
)替换别名(gc
)。这适用于每个别名(除非设置了shell选项COMPLETE\u alias
,该选项允许为别名设置单独的补全)
至于你想做什么:如果你认为-w
实际上是一个函数而不是别名,那么你确实需要自己编写一个补全。但是有一种更简单的方法:静态命名目录
命名目录通常只是系统上用户的主目录。最常见的可能是当前用户的主目录的~
。其他用户目录名为~USERNAME
。您还可以定义自己的静态命名目录。有两种方法可以做到这一点:
- 使用
显式定义名称,类似于别名:hash-d
~w
来引用您的工作区,在第二种情况下,您还可以使用$w
(例如,在带引号的字符串中使用)。键入cd~w/a-repo
将进入~/workspace/a-repo
。制表符完成与任何其他路径一样,因此按~w/a
将显示~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
%w=“/tmp”
%cd~w
%pwd
/tmp
%mkdir 1 2 3
%setopt自动光碟
%~w/
1 2 3
%~w/1
%pwd
/tmp/1
w="${HOME}/workspace"
% w="/tmp"
% cd ~w
% pwd
/tmp
% mkdir 1 2 3
% setopt AUTO_CD
% ~w/<TAB>
1 2 3
% ~w/1
% pwd
/tmp/1