我是 zsh 的新手,我经常做的一件事是执行位于我的 Scripts 目录中的 shell 脚本。我并不总是在 Scripts 目录中,但是......我可能在 $HOME 中,因此只想输入Sc<Tab>
并自动完成Scripts/
,然后能够自动完成我想从那里运行的脚本,当然...
但是,zsh 默认情况下似乎不这样做。如果我输入了ls
或,它只会为我自动完成目录名称cd
。如果我尝试先自动完成一个目录,它根本不会这样做。
有办法改变这种行为吗?
编辑:我发现我可以做到./Sc<Tab>
并且它会为我自动完成。我想我只是习惯了不必在某些内容之前输入./
即可自动完成,所以我仍然想知道这在 zsh 中是否可行,但目前这是一个可以接受的解决方法。
答案1
不完全是你问的,但我使用 s 来运行脚本。例如,如果我有一个文件 ~/Scripts/run-stuff.sh 我可以输入 s run-stuff.sh 它会运行该脚本。它还将对脚本名称进行制表符补全。它唯一不做的就是处理脚本目录中的子目录。
# Completion for s (scripts)
_s_comp() {
if [ $OS = "mac" ]; then
local LS=gls;
else
local LS=ls;
fi
reply=(`$LS --ignore-backups $HOME/Scripts/`);
}
compctl -K _s_comp s
您可能还需要一个别名,例如alias s="$HOME/Scripts
编辑:请注意,无论您当前位于哪个目录中,这都将起作用。
答案2
您可以将此指令添加到您的~/.zshrc
:
setopt autocd
它还有一个有益的副作用,即无需键入cd
即可更改目录。 :)