zsh 自动完成目录

zsh 自动完成目录

我是 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即可更改目录。 :)

相关内容