Como defino aliases e variáveis ​​​​do bash no vim?

Como defino aliases e variáveis ​​​​do bash no vim?

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

!alias lol='echo lol'
!lol='echo lol'

Responder1

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

É melhor definir os aliases no shell que inicia o Vim. Para variáveis ​​de ambiente, você também pode defini-las no Vim via :let $VAR = 'value'e pode usá-las em :!comandos. E você pode iniciar um shell no Vim com :shellou suspender o Vim e voltar ao shell original com :stopou ^z.

Responder2

viminicia uma instância de um não interativo bash(supondo bashque seja seu shell de login e que você não tenha modificado $SHELL) para cada !comando (em !cmd, vim é executado bash -c cmd). 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. bashnão expande aliases e não lê ~/.bashrcquando não é interativo

Para contornar isso, você pode definir $BASH_ENValgo que permita a expansão do alias e se reescreva ao sair bashcom a lista de novos aliases incluída. Algo como (em ~/.vimrc):

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

informação relacionada