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'
Mais quand je fais
:! gitlog
Je reçois
/bin/bash: gitlog: command not found
Je sais que je peux ajouter des alias comme celui-ci dans mon .gitconfig
[alias]
co = checkout
st = status
ci = commit
br = branch
df = diff
Cependant, je ne veux pas ajouter tous mes alias bash à .gitconfig. Ce n'est pas SEC.
Y a-t-il une meilleure solution?
Bash ne charge pas votre .bashrc à moins qu'il ne soit interactif. Utilisation
:set shellcmdflag=-ic
pour faire de Vim's :!
Shell se comporte comme votre invite de commande.
Je sais que cette question a déjà reçu une "réponse", 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 ce fil pour une réponse alternative sans avoir à quitter un shell interactif.
Si vous voulez un Shell non interactif (par défaut) mais une expansion des alias bash, mettez vos définitions d'alias dans un fichier, par ex. .bash_aliases et activer explicitement l'expansion d'alias dans ce fichier:
shopt -s expand_aliases alias la='ls -la'
Ajoutez ensuite ceci à votre .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. J'ai testé cela sur Mac OS X 10.9 et cela a fonctionné parfaitement!
Notez que selon la façon dont vos fichiers doth bash sont configurés, 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 googler et pour (oh-my-) les utilisateurs de zsh:
Ma solution à cela a été aussi simple que de copier .zshrc vers .zshenv - selon http://zsh.sourceforge.net/Intro/intro_3.html :
`.zshenv 'provient de toutes les invocations du shell, sauf si l'option -f est définie. Il doit contenir des commandes pour définir le chemin de recherche des commandes, ainsi que d'autres variables d'environnement importantes. `.zshenv 'ne doit pas contenir de commandes qui produisent une sortie ou supposent que le shell est attaché à un tty.
Donc $ cp ~/.zshrc ~/.zshenv
fera l'affaire.
Je ne me sens pas trop à l'aise avec la définition de l'option -i, car cela a un certain impact et j'utilise souvent le shell de vim. Ce que je ferais à la place, c'est quelque chose comme :!bash -c ". ~/.alias; gitlog"