为什么我会收到别名的“/bin/bash 找不到命令”错误?

为什么我会收到别名的“/bin/bash 找不到命令”错误?

我正在使用多个 python,我别名python3py

alias py="/opt/python3.4/bin/python3"

我想运行 python,vim所以我这样写:

map <F9> :call SpecialCompileRun()<CR>
func! SpecialCompileRun()
    exec "w"
    if &filetype == 'python'
        exec '!time py %'                                                                                                                                                                               
    endif
endfunc

但是当我按下F9vim 时,它告诉我:

/bin/bash py cannot find command

当我更改py为时python3,现在可以了,但我仍然想知道为什么?

答案1

因为你定义它的方式py是一个 shell 别名,而 Vim 不知道(也不关心)shell 别名。使用环境变量代替,也许像这样:

$ PY=/opt/python3.4/bin/python3
$ export PY

然后在 Vim 中:

...
exec '!time ' . fnameescape($PY) . ' %'
...

编辑: 添加fnameescape()。如果$PY包含对 Vim 有特殊含义的字符(fi#%),则需要它。

答案2

正如 @lcd047 告诉您的,别名不可用于vim.顺便说一句,它们也不适用于 shell 脚本,除非您激活该expand_aliases选项。

无论如何,另一种选择是创建链接而不是别名:

sudo ln -s /opt/python3.4/bin/python3 /usr/bin/py

这将创建一个/usr/bin/py指向 的链接/opt/python3.4/bin/python3。由于/usr/bin在您的 中$PATH,该py命令将在任何地方可用。

相关内容