Les commandes exécutées à partir de vim ne reconnaissent pas les alias de commandes bash

J’utilise bash sur mac et l’un des alias est comme ça

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

Cependant quand je le fais

  :! gitlog 

Je reçois

 /bin/bash: gitlog: command not found 

Je sais que je peux append des alias comme celui-ci dans mon fichier .gitconfig

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

Cependant, je ne veux pas append tous mes alias bash à .gitconfig. Ce n’est pas sec.

Y a-t-il une meilleure solution?

Bash ne charge pas votre .bashrc sauf s’il est interactif. Utilisation

 :set shellcmdflag=-ic 

faire Vim’s:! shell se comporte comme votre invite de commande.

Je sais que cette question a déjà été “répondue” auparavant, mais j’ai un problème avec la réponse. Le shell n’a pas besoin d’être défini sur interactif dans Vim. Voir cette discussion pour une réponse alternative sans avoir à quitter un shell interactif.

Si vous voulez un shell non interactif (par défaut) mais une extension des alias bash, placez vos définitions d’alias dans un fichier, par exemple .bash_aliases et activez explicitement l’extension d’alias dans ce fichier:

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

Ajoutez ensuite ceci à votre fichier .vimrc pour que le fichier d’alias soit réellement lu chaque fois que vous exécutez une commande shell depuis vim:

 let $BASH_ENV = "~/.bash_aliases" 

Cette solution a été suggérée par “Jakob”. Voir le lien ci-dessous pour l’original. Je l’ai testé sur Mac OS X 10.9 et cela a parfaitement fonctionné!

vim – ne pas reconnaître les alias en mode interactif?

Notez que selon la configuration de vos fichiers bash, vous pouvez utiliser l’option -l plutôt que l’option -i. Cela lancera le shell en tant que shell de connexion.

Je sais que cela peut être une vieille question, mais aucune des réponses ci-dessus n’a fonctionné pour moi comme souhaité. Donc, pour ceux qui sont venus ici de Google et pour les utilisateurs de (oh-mon) zsh:

Ma solution était simplement de copier .zshrc vers .zshenv – selon http://zsh.sourceforge.net/Intro/intro_3.html :

`.zshenv ‘provient de tous les appels du shell, à moins que l’option -f ne soit définie. Il doit contenir des commandes pour définir le chemin de recherche de la commande, ainsi que d’autres variables d’environnement importantes. `.zshenv ‘ne doit pas contenir de commandes produisant une sortie ou supposant que le shell est attaché à un tty.

Donc, $ cp ~/.zshrc ~/.zshenv fera l’affaire.

Je ne me sens pas trop à l’aise avec l’option -i, car elle a un certain impact et j’utilise souvent le shell à partir de vim. Ce que je ferais à la place, c’est quelque chose comme :!bash -c ". ~/.alias; gitlog"