Como eu defino aliases e variáveis de bash de dentro do vim?

2

No modo cmdline, os exemplos a seguir não funcionam para mim.

!alias lol='echo lol'
!lol='echo lol'
    
por bug 10.04.2013 / 15:26

2 respostas

5

Quando você usa o comando :! , um novo shell é gerado a partir do Vim. Nesse shell, o alias é definido, mas imediatamente depois disso, o shell é encerrado e tudo é perdido.

Melhor definir os aliases no shell que inicia o Vim. Para variáveis de ambiente, você também pode defini-las a partir do Vim via :let $VAR = 'value' , e você pode usá-las nos comandos :! . E você pode iniciar um shell a partir do Vim com :shell ou suspender o Vim e voltar para o shell original com :stop ou ^z .

    
por 10.04.2013 / 16:13
4

vim inicia uma instância de um não interativo bash (assumindo que bash é seu shell de login e você não modificou $SHELL ) para cada comando ! (em !cmd , vim é executado %código%). Então:

  1. Um alias definido em um! comando, não estaria disponível no outro shell iniciado pelo próximo! comando, pois é um processo completamente diferente.
  2. bash -c cmd não expande os aliases e não lê bash quando não é interativo

Para contornar isso, você pode definir ~/.bashrc como algo que permita expansão de alias e se reescreva na saída de $BASH_ENV com a lista de novos aliases incluídos. Algo parecido com (em bash ):

let $BASH_ENV = $HOME . "/.bashvimrc." . getpid()
au VimLeave * silent !exec rm -f "$BASH_ENV"
silent !echo 'vim_setup() { shopt -s expand_aliases; trap write_aliases EXIT; eval "$@"; }; write_aliases() { typeset -f vim_setup write_aliases; alias; echo vim_setup \"\$@\";} > "$BASH_ENV"; vim_setup "$@"' > "$BASH_ENV"
set shell=/bin/bash
    
por 10.04.2013 / 16:13