zsh后缀别名 - 例外

时间:2013-12-04 06:04:46

标签: zsh zshrc

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

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

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

1 个答案:

答案 0 :(得分:3)

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

但您可以使用函数检查路径中的文件名是否作为别名的目标。根据结果​​,此函数将启动程序或在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

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