¿Cómo puedo hacer que los alias de shell estén disponibles cuando salgo de Vim?

11

En mi .zshrc, declaro algunos alias. Por ejemplo, which dbstartmuestra el contenido de ese alias.

Si abro vim desde ese shell, es un proceso hijo. En Vim, puedo ejecutar comandos de shell con :! some_command. Si hago :! echo $0para ver qué shell está usando Vim, genera '/ bin / zsh'. Sin embargo, mis alias no están disponibles allí.

¿Cómo puedo hacer que mis alises de shell normales estén disponibles cuando salgo de Vim?

Dos ideas:

  • De alguna manera, EXPORTlos alias del shell original, a su proceso hijo vim, y de nuevo a su proceso hijo shell
  • Configure Vim para leer mi .zshrccuando cree sus subcapas
Nathan Long
fuente
incluya su .zshrcen .profile (que parece ser utilizado porvim
Kiwy

Respuestas:

13

Antigua pregunta, pero la solución más limpia para vim en zsh era agregar el alias al ~/.zshenvarchivo que zsh carga para todos los shells, inicio de sesión, interactivo u otros. Esto evita iniciar vim o zsh con banderas y cualquier posible problema con eso.

Hay una buena explicación de ~/.zshenvvs ~/.zshrcaquí: http://tanguy.ortolo.eu/blog/article25/shrc

Básicamente, zsh siempre es fuente ~/.zshenv. Fuente shells interactivos ~/.zshrcy de acceso fuente de conchas ~/.zprofiley ~/.zlogin. Por lo tanto, las fuentes de un shell de inicio de sesión interactivo ~/.zshenv ~/.zprofile ~/.zlogin ~/.zloginy un shell no interactivo y sin inicio de sesión como el que vim usa para ejecutar orígenes de comandos solamente ~/.zshenv.

Kevin Lee
fuente
Esta no es una respuesta de solo enlace, pero sería mejor si incluyera la explicación de la diferencia con el enlace; de esa manera todos pueden beneficiarse de la explicación aquí y estamos a salvo de linkrot.
HalosGhost
1
Actualicé mi respuesta con los puntos principales del enlace.
Kevin Lee
Esto funcionó exponencialmente mejor para mí que las otras respuestas. Cuando agregué para vim para iniciar un shell interactivo, se suspendió de inmediato. Cuando uso el archivo .zshenv (que antes no sabía que existía), ¡recupero mis alias!
Caleb
5

Parece que esto funciona para zsh:

  • Asegúrese de que $ZDOTDIR=el directorio donde .zshrcse encuentra. P.ej,export ZDOTDIR=$HOME
  • En .vimrc, set shell=zsh\ -io set shellcmdflag+=ipara el mismo efecto.

Esto -ise debe a que, cuando se inicia en modo interactivo, se carga zshell $ZDOTDIR/.zshrc. Ver man zshy buscar $ZDOTDIRdetalles.

Nathan Long
fuente
1
Hmmm, esto crea un problema extraño para mí: ¡copiar al portapapeles del sistema como "+yahora suspende a Vim! superuser.com/questions/712245/…
Nathan Long
55
Mi vim se suspende tan pronto como lo abro.
Caleb
0

Creo que cuando estás dentro vimy usas el :!some_commandestá usando cualquier shell definido por la variable de entorno $SHELL.

Esto es configurable, por lo que puede cambiar anulando el $SHELLcomportamiento en su $HOME/.vimrcarchivo para usar zshen su lugar.

:set shell
shell=/bin/bash
:set shell=zsh\ -i

O al .vimrcusar 1 de estas 2 líneas

 set shell=/bin/bash\ -i
 set shell=/bin/zsh\ -i

Ayuda vim

Ver :help shelldesde adentro vimpara más información.

:!{cmd}                 Execute {cmd} with the shell.  See also the 'shell'
                        and 'shelltype' option.
                        Any '!' in {cmd} is replaced with the previous
                        external command (see also 'cpoptions').  But not when
                        there is a backslash before the '!', then that
                        backslash is removed.  Example: ":!ls" followed by
                        ":!echo ! \! \\!" executes "echo ls ! \!".
                        After the command has been executed, the timestamp of
                        the current file is checked timestamp.
slm
fuente
No, como dije: "Si lo hago:! Echo $ 0 para ver qué shell está usando Vim, genera '/ bin / zsh'"
Nathan Long
@NathanLong - no, creo que eso te está engañando, mira mis actualizaciones.
slm
@slm vim extrae el valor de $SHELL. Entonces tu caparazón es /bin/bash. Si mi caparazón es /bin/zsh, eso es lo que usará.
Patrick
0

Al establecer shell=/usr/bin/zsh\ -len .vimrcresuelto mi problema

Nota:

Estoy usando: linux mint 17.1

murali kodali
fuente
usando ubuntu 14.04 esto no funciona para mí
vilsbole