
En modo cmdline, los siguientes ejemplos no me funcionan.
!alias lol='echo lol'
!lol='echo lol'
Respuesta1
Cuando usa el :!
comando, se genera un nuevo shell desde Vim. En ese shell, se establece el alias, pero inmediatamente después, el shell se cierra y todo se pierde.
Lo mejor es definir los alias en el shell que inicia Vim. Para las variables de entorno, también puede configurarlas desde Vim a través de :let $VAR = 'value'
y puede usarlas en :!
los comandos. Y puede iniciar un shell desde Vim con :shell
o suspender Vim y volver al shell original con :stop
o ^z
.
Respuesta2
vim
inicia una instancia de un no interactivo bash
(asumiendo que bash
es su shell de inicio de sesión y no lo ha modificado $SHELL
) para cada !
comando (en !cmd
, vim se ejecuta bash -c cmd
). Entonces:
- Un alias definido en uno ! comando, no estaría disponible en el otro shell iniciado por el siguiente! comando ya que es un proceso completamente diferente.
bash
no expande los alias y no lee~/.bashrc
cuando no es interactivo
Para solucionar esto, puede configurar $BASH_ENV
algo que permita la expansión de alias y se reescriba al salir bash
con la lista de nuevos alias incluidos. Algo como (en ~/.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