zsh 后缀别名 - 例外

Ali*_*ice 2 zsh zshrc

我想使用后缀别名.py在 vim 中自动打开文件。为此,我已经alias -s py=vim在我的 zshrc 中。

但是,我的路径中确实有一些 python 文件是可执行文件,我想禁用后缀完成。我可以直接用 调用文件python /path/to/executable.py,但每次输入路径都很麻烦(并且反对PATH无论如何)。

有没有办法从后缀别名中免除某些文件,最好是那些不在当前工作目录中的文件?如果没有,是否有人指示如何实现这样的功能?

Ada*_*hon 5

在评估别名之前,无法有选择地禁用特定文件的后缀别名。

但是您可以使用函数来检查文件名是否在您的路径中作为别名的目标。根据结果​​,此函数将启动程序或在 vim 中加载文件。

例如,您可以将此添加到您的 .zshrc

vim_or_exec ()
{
    interps=($(whence -a "$1"))
    if [[ -z $interps[2] ]]; then
        vim "$1"
    else
        "$interps[2]" "${@:2}"
    fi
}

alias -s py=vim_or_exec
Run Code Online (Sandbox Code Playgroud)

whence -a显示给定文件名的所有解释列表,按优先级排序。设置别名后,第一个解释将是别名的值,即vim_or_exec. 如果文件不在 $PATH (或别名、shell 函数等)中,则不会有进一步的解释,文件将在 vim ( vim "$1") 中加载。如果有进一步的解释,第二个 ( "$interps[2]") 将使用任何进一步的命令行参数 ( ${@:2})调用。