zsh 自动完成目录

int*_*rgc 7 zsh autocomplete

我是 zsh 的新手,我经常做的一件事是执行我的名为 Scripts 的目录中的 shell 脚本。我并不总是在 Scripts 目录中,但是......我可能在 $HOME 中,因此我只想输入Sc<Tab>并让它自动完成Scripts/,然后能够自动完成我想从那里运行的脚本,当然...

但是,默认情况下 zsh 似乎不会这样做。如果我输入了ls或 ,它只会为我自动完成目录名称cd。如果我首先尝试自动完成一个目录,它只是不会这样做。

有没有办法改变这种行为?

编辑:我发现我可以做到./Sc<Tab>并且它会为我自动完成。我想我只是习惯了不必./在某些东西之前输入才能让它自动完成,所以我仍然想知道这在 zsh 中是否可行,但现在这是一个可以接受的解决方法。

Jas*_*son 5

不完全是你问的,但我使用 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
Run Code Online (Sandbox Code Playgroud)

您可能还需要一个别名,例如alias s="$HOME/Scripts

编辑:请注意,无论您当前位于哪个目录中,这都将起作用。