erreur: il y avait un problème avec l'éditeur 'vi' lors de son utilisation avec git

12

J'ai cet étrange problème avec l'utilisation vicomme éditeur pour git commit -a.

Le flux normal est: je tape git commit -a, viapparaît, j'entre mon message de validation, puis :wqpour enregistrer et quitter vi.

Cela fonctionne bien. Cependant, parfois je fais une faute de frappe et au lieu de :wqtaper :Wq(car j'utilise le shift pour :). Ensuite, lorsque je me corrige et que je tape à :wqnouveau, gitdonne l'erreur suivante:

error: There was a problem with the editor 'vi'.
Please supply the message using either -m or -F option.

Comment puis-je réparer cela?

houbysoft
la source
Quelle version de gitet vi? Je ne peux pas reprocher cela avec vim 7.3, git version 1.7.11.1.
Christopher
@Christopher: vi 7.3et git 1.7.9.6 (Apple Git-31.1), ceux par défaut sur Mountain Lion afaik
houbysoft

Réponses:

14

viexiste avec un statut différent de zéro, bien que sans détails supplémentaires sur votre configuration, il est difficile de dire pourquoi. Si vous utilisez de nombreux plugins vim, vous pouvez essayer de déplacer votre .vimrcfichier vers .vimrc.backet voir si vous pouvez répliquer. Il existe quelques sources qui discutent de ce problème, dont au moins une avec une solution potentielle:

git config --global core.editor /usr/bin/vim

J'essaierais cependant de supprimer votre .vimrcpremier. Cela semble provoquer plus de consternation.

Christophe
la source
5
Merci, git config --global core.editor /usr/bin/vimcorrigé.
houbysoft
1
La solution de @ applOOb est meilleure, car ce n'est pas un hack comme celui-ci.
jefflunt
15

Comme répondu ici: /programming/22699614/git-commit-messages-lost-by-vi

La vraie solution est de

git config --global core.editor vim -f

Selon la documentation de Vim - -f option should be used when Vim is executed by a program that will wait for the edit session to finish

applOOb
la source
3
Enfin ... c'est la bonne solution. Il résout également le problème de frapper :Wet d'avoir git rejeter votre message de validation lorsque vous l'enregistrez par la suite.
Ryanmt
Une solution qui est en fait une solution et non une solution de contournement boiteuse! J'espère vraiment que les gens qui liront la réponse acceptée comprendront la différence entre leur viminvocation normale et le hack qu'ils utilisent.
jefflunt
1

Utilisez-vous les plugins golang vim? Cette ligne provoque le problème de valeur de sortie vi pour moi: filetype plugin indent off

La suppression de l'ensemble du bloc de plug-in golang a .vimrcrésolu le problème. L'installation du plugin golang à l'aide de fugitif peut être aussi simple que:ln -s $GOROOT/misc/vim ~/.vim/bundle/vim-golang

(Je viens de documenter le problème dans ce numéro sur le github vim-golang )

Jan
la source
0

Quelque chose ne va pas avec la configuration de Git, je suppose.

La solution est donc de réinitialiser la configuration de Git et cela a fonctionné pour moi:

git config --global core.editor $(which vim)

$(which vim)est plus flexible que /usr/bin/vim(l'exécutable vim peut ne pas être là pour certaines personnes)

Ericn
la source