zsh后缀别名-异常

zsh后缀别名-异常,zsh,zshrc,Zsh,Zshrc,我想使用后缀别名在vim中自动打开.py文件。为此,我在zshrc中使用了别名-spy=vim 然而,我的路径中确实有一些python文件是可执行的,我想对其禁用后缀完成。我可以直接用python/path/to/executable.py调用该文件,但是每次输入路径都很麻烦(而且无论如何都要反对path的概念) 有没有办法免除某些文件的后缀别名,最好是那些不在当前工作目录中的文件?如果没有,是否有人知道如何实现这样的功能?在评估别名之前,无法有选择地禁用特定文件的后缀别名 但您可以使用一个函数

我想使用后缀别名在vim中自动打开
.py
文件。为此,我在zshrc中使用了
别名-spy=vim

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


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

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

但您可以使用一个函数来检查路径中是否有文件名作为别名的目标。根据结果,该功能随后将启动程序或在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\u或\u exec
。如果文件不在$PATH(或别名、shell函数等)中,则不会有进一步的解释,文件将加载到vim中(
vim“$1”
)。如果有进一步的解释,将使用任何进一步的命令行参数(
${@:2}
)调用第二个(
“$interps[2]”)。

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

但您可以使用一个函数来检查路径中是否有文件名作为别名的目标。根据结果,该功能随后将启动程序或在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\u或\u exec
。如果文件不在$PATH(或别名、shell函数等)中,则不会有进一步的解释,文件将加载到vim中(
vim“$1”
)。如果有进一步的解释,第二个(
“$interps[2]”
)将用任何进一步的命令行参数(
${:2}
)调用。

工作起来像个符咒,我了解了
从哪里来的
-谢谢。工作起来像个符咒,我了解了
从哪里来的
-谢谢。