Fehler: Es gab ein Problem mit dem Editor „vi“, wenn er mit git verwendet wurde

Ich habe dieses seltsame Problem mit der Verwendung vials Editor für git commit -a.

Der normale Ablauf ist: Ich tippe git commit -a, vierscheint, ich gebe meine Commit-Nachricht ein und dann :wqzum Speichern und Beenden von vi.

Das funktioniert gut. Manchmal mache ich jedoch einen Tippfehler und tippe stattdessen (weil :wqich :Wqdie Verschiebung für verwende :). Wenn ich mich dann korrigiere und :wqerneut gittippe, kommt folgender Fehler:

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

Wie kann ich das beheben?

Welche Version von gitund vi? Ich kann dies nicht mit vim 7.3, Git-Version 1.7.11.1 reproduzieren.
@Christopher: vi 7.3und git 1.7.9.6 (Apple Git-31.1), die Standardeinstellungen auf Mountain Lion afaik

Antworten (4)

viist mit einem Nicht-Null-Status vorhanden, obwohl es ohne zusätzliche Details zu Ihrem Setup schwierig zu sagen ist, warum. Wenn Sie viele Plugins für verwenden vim, können Sie versuchen, Ihre .vimrcDatei nach zu verschieben .vimrc.backund zu sehen, ob Sie sie replizieren können. Es gibt einige Quellen , die dieses Problem diskutieren, darunter mindestens eine mit einer möglichen Lösung:

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

Ich würde jedoch zuerst versuchen, Ihren zu entfernen .vimrc. Es scheint für mehr Bestürzung zu sorgen.

Danke, git config --global core.editor /usr/bin/vimbehoben.
Die Lösung von @applOOb ist besser, da es sich nicht um einen Hack wie diesen handelt.

Wie hier beantwortet: https://stackoverflow.com/questions/22699614/git-commit-messages-lost-by-vi

Die wirkliche Lösung ist

git config --global core.editor vim -f

Laut vim-Dokumentation --f option should be used when Vim is executed by a program that will wait for the edit session to finish

Endlich ... das ist die richtige Lösung. Es behebt auch das Problem, :Wdass Git Ihre Commit-Nachricht trifft und zurückweist, wenn Sie sie anschließend speichern.
Eine Lösung, die tatsächlich eine Lösung ist und kein lahmer Workaround! Ich hoffe wirklich, dass Leute, die die akzeptierte Antwort lesen, den Unterschied zwischen ihrem normalen vimAufruf und dem von ihnen verwendeten Hack verstehen.
@applOOb muss dort möglicherweise Anführungszeichen verwenden: git config --global core.editor 'vim -f', andernfalls -fwird es nicht eingeschlossen.

Verwenden Sie die Golang-Vim-Plugins? Diese Zeile verursacht bei mir das Problem mit dem vi-Ausgangswert:filetype plugin indent off

Das Entfernen des gesamten Golang-Plugin-Blocks in behebt .vimrcdas Problem. Die Installation des Golang-Plugins mit Flüchtling kann so einfach sein wie:ln -s $GOROOT/misc/vim ~/.vim/bundle/vim-golang

(Ich habe das Problem gerade in dieser Ausgabe auf dem vim-golang-Github dokumentiert. )

Irgendetwas stimmt mit der Git-Konfiguration nicht, denke ich.

Die Lösung besteht also darin, die Git-Konfiguration zurückzusetzen, und es hat bei mir funktioniert:

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

$(which vim)ist flexibler als /usr/bin/vim(die ausführbare vim-Datei ist für einige Leute möglicherweise nicht vorhanden)