Los comandos ejecutados desde vim no reconocen alias de comando bash

Yo uso bash en Mac y uno de los alias es así

alias gitlog='git --no-pager log -n 20 --pretty=format:%h%x09%an%x09%ad%x09%s --date=short --no-merges' 

Sin embargo, cuando lo hago

  :! gitlog 

yo obtengo

 /bin/bash: gitlog: command not found 

Sé que puedo agregar alias como este en mi .gitconfig

 [alias] co = checkout st = status ci = commit br = branch df = diff 

Sin embargo, no quiero agregar todos mis alias de bash a .gitconfig. Eso no es SECO.

¿Hay una mejor solución?

Bash no carga su .bashrc a menos que sea interactivo. Utilizar

 :set shellcmdflag=-ic 

para hacer Vim’s:! shell se comporta como su símbolo del sistema.

Sé que esta pregunta ya fue “respondida” previamente, pero tengo un problema con la respuesta. El shell no necesita ser configurado como interactivo en Vim. Consulte este hilo para obtener una respuesta alternativa sin tener que salir de un shell interactivo.

Si desea un shell no interactivo (por defecto) pero expansión de alias bash, ponga sus definiciones de alias en un archivo, por ejemplo .bash_aliases y habilite explícitamente la expansión de alias en este archivo:

 shopt -s expand_aliases alias la='ls -la' 

A continuación, agregue esto a su .vimrc para que el archivo de alias se lea realmente cada vez que ejecute un comando de shell desde vim:

 let $BASH_ENV = "~/.bash_aliases" 

Esta solución fue sugerida por “Jakob”. Vea el enlace a continuación para el original. ¡Probé esto en Mac OS X 10.9 y funcionó a la perfección!

vim – ¿no reconoce alias cuando está en modo interactivo?

Tenga en cuenta que dependiendo de cómo estén configurados sus archivos dot bash, puede usar la opción -l en lugar de la opción -i. Esto lanzará el shell como shell de inicio de sesión.

Sé que puede ser una vieja pregunta, sin embargo, ninguna de las respuestas anteriores funcionó para mí como se deseaba. Entonces para los que vinieron aquí de googlear y para (oh-mi) zsh usuarios:

Mi solución a esto fue tan simple como copiar .zshrc a .zshenv – según http://zsh.sourceforge.net/Intro/intro_3.html :

`.zshenv ‘se obtiene de todas las invocaciones del shell, a menos que se establezca la opción -f. Debe contener comandos para establecer la ruta de búsqueda del comando, además de otras variables de entorno importantes. `.zshenv ‘no debe contener comandos que produzcan salida o suponga que el shell está conectado a un tty.

Entonces $ cp ~/.zshrc ~/.zshenv hará la cosa.

No me siento demasiado cómodo con la configuración de la opción -i, ya que tiene bastante impacto y estoy usando el shell a menudo de vim. Lo que haría en su lugar es algo así como :!bash -c ". ~/.alias; gitlog"