Por que recebo um erro “/ bin / bash cannot find command” para um alias?

3

Estou usando vários python, alias python3 to py :

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

Eu quero executar python em vim , então escrevo isto:

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

mas quando eu pressiono F9 no vim, isso me diz que:

/bin/bash py cannot find command

quando altero py para python3 , tudo bem, mas ainda quero saber por quê?

    
por roger 25.04.2015 / 09:42

2 respostas

11

Porque a maneira como você define py é um alias de shell, e o Vim não sabe (nem se importa) sobre aliases de shell. Use uma variável de ambiente, talvez assim:

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

depois no Vim:

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

Editar: Adicionada fnameescape() . É necessário se $PY contiver caracteres que tenham um significado especial para o Vim (f.i. # e % ).

    
por 25.04.2015 / 09:50
5

Como o @ lcd047 informou, os aliases não estão disponíveis para vim . Eles também não estão disponíveis para shell scripts, a menos que você ative a opção expand_aliases .

De qualquer forma, outra opção seria criar um link em vez de um alias:

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

Isso criará um link em /usr/bin/py , que aponta para /opt/python3.4/bin/python3 . Como /usr/bin está no seu $PATH , o comando py estará disponível em todos os lugares.

    
por 25.04.2015 / 13:25

Tags