¿Cómo configuro alias y variables de bash desde vim?

¿Cómo configuro alias y variables de bash desde vim?

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 :shello suspender Vim y volver al shell original con :stopo ^z.

Respuesta2

viminicia una instancia de un no interactivo bash(asumiendo que bashes 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:

  1. 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.
  2. bashno expande los alias y no lee ~/.bashrccuando no es interactivo

Para solucionar esto, puede configurar $BASH_ENValgo que permita la expansión de alias y se reescriba al salir bashcon 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

información relacionada