655 Stimmen

Wie kann ich einen Editor für die Arbeit mit Git unter Windows einrichten?

Ich probiere aus Git unter Windows . Ich kam zu dem Punkt, an dem ich "git commit" versuchte, und erhielt diesen Fehler:

Terminal ist stumm, aber kein VISUAL noch EDITOR definiert. Bitte geben Sie die Nachricht entweder mit der Option -m oder -F.

Also habe ich herausgefunden, dass ich eine Umgebungsvariable namens EDITOR benötige. Kein Problem. Ich habe sie so gesetzt, dass sie auf Notepad zeigt. Das hat funktioniert, fast. Die Standardübertragungsnachricht wird in Notepad geöffnet. Aber Notepad unterstützt keine reinen Zeilenvorschübe. Ich ging los und holte Notepad++ aber ich kann nicht herausfinden, wie ich Notepad++ als den %EDITOR% so zu gestalten, dass es wie erwartet mit Git funktioniert.

Ich bin nicht mit Notepad++ verheiratet. Zu diesem Zeitpunkt ist es mir egal, welchen Editor ich verwende. Ich möchte nur in der Lage sein Commit-Meldungen in einem Editor eingeben und nicht über die Befehlszeile (mit -m ).

Diejenigen von Ihnen, die Git unter Windows verwenden: Welches Tool verwenden Sie, um Ihre Commit-Nachrichten zu bearbeiten, und was mussten Sie tun, damit es funktioniert?

639voto

VonC Punkte 1117238

Update September 2015 (6 Jahre später)

Le site letzte Version von git-for-Windows (2.5.3) umfasst jetzt:

Durch die Konfiguration von git config core.editor notepad , Benutzer können nun notepad.exe als ihren Standard-Editor .
Konfigurieren von git config format.commitMessageColumns 72 wird vom Notepad-Wrapper aufgegriffen und umbricht die Commit-Nachricht, nachdem der Benutzer sie bearbeitet hat.

参照 Übergabe 69b301b por Johannes Schindelin ( dscho ) .

Und Git 2.16 (Q1 2018) zeigt eine Meldung an, um den Benutzer darauf hinzuweisen, dass es darauf wartet, dass der Benutzer die Bearbeitung beendet, wenn ein Editor gestartet wird, falls der Editor sich in einem versteckten Fenster oder an einem unübersichtlichen Ort öffnet und der Benutzer sich verloren geht.

参照 abfb04d übergeben (07. Dezember 2017), und a64f213 übergeben (29 Nov 2017) von Lars Schneider ( larsxschneider ) .
Mit Hilfe von: Junio C. Hamano ( gitster ) .
(Zusammengefasst von Junio C. Hamano -- gitster -- en 0c69a13 übergeben , 19. Dezember 2017)

launch_editor() : zeigt an, dass Git auf Benutzereingaben wartet

Wenn eine grafische GIT_EDITOR wird durch einen Git-Befehl ausgelöst, der die öffnet und auf Benutzereingaben wartet (z.B. " git rebase -i "), dann wird das Editorfenster möglicherweise von anderen Fenstern verdeckt werden.
Der Benutzer könnte auf folgende Dinge starren das ursprüngliche Git-Terminalfenster zu starren, ohne überhaupt zu merken, dass er/sie mit einem anderen Fenster interagieren muss, bevor Git fortgesetzt werden kann. Für diesen Benutzer ist Git hängend erscheinen.

Eine Meldung ausgeben, dass Git auf die Eingabe des Editors im Original wartet Terminal aus und löschen Sie sie, wenn der Editor zurückkehrt, falls das Terminal das Löschen der letzten Zeile unterstützt


Ursprüngliche Antwort

Ich habe es gerade mit Git Version 1.6.2.msysgit.0.186.gf7512 und Notepad++5.3.1 getestet

Ich bevorzuge no eine EDITOR-Variable setzen müssen, also habe ich es versucht:

git config --global core.editor "\"c:\Program Files\Notepad++\notepad++.exe\""
# or
git config --global core.editor "\"c:\Program Files\Notepad++\notepad++.exe\" %*"

Das gibt immer:

C:\prog\git>git config --global --edit
"c:\Program Files\Notepad++\notepad++.exe" %*: c:\Program Files\Notepad++\notepad++.exe: command not found
error: There was a problem with the editor '"c:\Program Files\Notepad++\notepad++.exe" %*'.

Wenn ich eine npp.bat mit definiere:

"c:\Program Files\Notepad++\notepad++.exe" %*

und ich tippe:

C:\prog\git>git config --global core.editor C:\prog\git\npp.bat

Es funktioniert nur in der DOS-Sitzung, aber nicht von der Git-Shell aus .
(nicht, dass mit dem Konfigurationsmechanismus von core.editor ein Skript mit " start /WAIT... " würde nicht funktionieren, sondern nur ein neues DOS-Fenster öffnen)


Bennett's Antwort erwähnt die Möglichkeit, kein Skript hinzuzufügen, sondern direkt auf das Programm selbst zu verweisen zwischen einfachen Zitaten . Achten Sie auf die Richtung der Schrägstriche! Verwenden Sie / PAS \ zur Trennung von Ordnern im Pfadnamen!

git config --global core.editor \
"'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"

Oder wenn Sie mit einem 64-Bit-System arbeiten:

git config --global core.editor \
"'C:/Program Files (x86)/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"

Ich ziehe es jedoch vor, ein Skript zu verwenden (siehe unten): Auf diese Weise kann ich mit verschiedenen Pfaden oder Optionen spielen, ohne mich erneut für ein git config .


Die eigentliche Lösung (mit einem Skript) war, dies zu realisieren:
auf die Sie sich in der Konfigurationsdatei beziehen, ist eigentlich eine Shell ( /bin/sh ) Skript und nicht ein DOS-Skript.

Was also funktioniert, ist:

C:\prog\git>git config --global core.editor C:/prog/git/npp.bat

mit C:/prog/git/npp.bat :

#!/bin/sh
"c:/Program Files/Notepad++/notepad++.exe" -multiInst "$*"

oder

#!/bin/sh
"c:/Program Files/Notepad++/notepad++.exe" -multiInst -notabbar -nosession -noPlugin "$*"

Mit dieser Einstellung kann ich ' git config --global --edit ' von DOS oder Git Shell, oder ich kann ' git rebase -i ... ' von DOS oder Git Shell aus.
Bot-Befehle lösen eine neue Instanz von notepad++ aus (daher die -multiInst '), und warten Sie, bis diese Instanz geschlossen wird, bevor Sie fortfahren.

Beachten Sie, dass ich nur '/' verwende, nicht \ '. Und ich msysgit mit Option 2 installiert. (Fügen Sie die git\bin in das Verzeichnis PATH Umgebungsvariable, aber ohne einige eingebaute Windows-Tools außer Kraft zu setzen)

Die Tatsache, dass der Wrapper von Notepad++ .bat heißt, ist nicht wichtig.
Es wäre besser, die Datei 'npp.sh' zu nennen und sie im Verzeichnis [git]\cmd (oder in einem beliebigen Verzeichnis, auf das Ihre Umgebungsvariable PATH verweist).


Siehe auch:


Leuchtfeuer228 fügt hinzu. in den Kommentaren :

Für alle, die ein Problem haben, bei dem N++ einfach eine leere Datei öffnet und Git Ihre Commit-Nachricht nicht annimmt, siehe " Abbruch der Übertragung aufgrund einer leeren Nachricht ": Ändern Sie Ihr .bat o .sh Datei zu sagen:

"<path-to-n++" .git/COMMIT_EDITMSG -<arguments>. 

Dadurch wird Notepad++ angewiesen, die temporäre Commit-Datei zu öffnen, anstatt eine leere neue Datei zu erstellen.

362voto

Bennett McElwee Punkte 23106

Aufbauend auf Darrens Antwort Wenn Sie Notepad++ verwenden, können Sie einfach Folgendes tun (alles in einer Zeile):

git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"

Offensichtlich ist die C:/Program Files/Notepad++/notepad++.exe Teil sollte der Pfad zur ausführbaren Datei von Notepad++ auf Ihrem System sein. Er könnte zum Beispiel lauten C:/Program Files (x86)/Notepad++/notepad++.exe .

Das funktioniert bei mir wunderbar.

Artikel Wie man Notepad++ als Standard-Git-Editor für Übertragungen anstelle von Vim einstellt erklärt die Parameter des Befehls.

53voto

Darren Bishop Punkte 2199

Wie auch immer, ich habe gerade mit diesem Thema herumgespielt und folgendes gefunden, das für mich gut funktioniert:

git config --global core.editor "'C:/Program Files/TextPad 5/TextPad.exe' -m"

Ich glaube nicht, dass CMD einfache Anführungszeichen mag, also müssen Sie doppelte Anführungszeichen verwenden, um das in ein Leerzeichen eingebettete Zeichenfolgenargument anzugeben".

Cygwin (das, wie ich glaube, die zugrunde liegende Plattform für Git's Bash ist) hingegen mag beides ' y " ; Sie können einen CMD-ähnlichen Pfad angeben, indem Sie / anstelle von \ solange die Zeichenkette in Anführungszeichen steht, d. h. in diesem Fall in einfachen Anführungszeichen.

Le site -m setzt die Verwendung mehrerer Editoren außer Kraft bzw. zeigt sie an, und es besteht keine Notwendigkeit für eine %* am Ende angehängt.

28voto

Nick Knowlson Punkte 6965

Bearbeiten: Nachdem ich auf Vim 7.3 aktualisiert habe, bin ich zu dem Schluss gekommen, dass der sauberste und einfachste Weg, dies zu tun, ist:

  1. Fügen Sie den Hauptordner von Vim zu Ihrem Pfad hinzu (Rechtsklick auf Mein ComputerEigenschaftenFortgeschritteneUmgebungsvariablen )

  2. Führen Sie das aus:

    git config --global core.editor "gvim --nofork '%*'"

Wenn Sie es so machen, dann bin ich ziemlich sicher, dass es auch mit Cygwin funktioniert.

Ursprüngliche Antwort:

Selbst mit ein paar Vim-bezogenen Antworten hatte ich Probleme, dies mit gVim unter Windows zum Laufen zu bringen (ohne eine Batch-Datei oder %EDITOR% oder Cygwin zu verwenden).

Was ich schließlich gefunden habe, ist schön und sauber und basiert auf einigen der hier vorgestellten Lösungen:

git config --global core.editor \
"'C:/Program Files/Vim/vim72/gvim.exe' --nofork '%*'"

Ein Problem, das mich eine Weile beschäftigt hat, ist, dass es sich dabei nicht um die Backslashes im Windows-Stil handelt. Sie sind normale Schrägstriche.

16voto

Patrick Johnmeyer Punkte 28962

Notepad++ funktioniert einwandfrei, obwohl ich lieber mit Notepad, -m oder manchmal sogar mit dem eingebauten "Bearbeiten" arbeite.

Das Problem, das bei der Verwendung von Notepad++ auftritt, hängt damit zusammen, wie Git die ausführbare Datei des Editors startet. Meine Lösung für dieses Problem ist das Setzen der Umgebungsvariablen EDITOR zu einer Batch-Datei, anstatt der eigentlichen ausführbaren Datei des Editors, die Folgendes tut:

start /WAIT "E:\PortableApps\Notepad++Portable\Notepad++Portable.exe" %*

/WAIT weist die Kommandozeilensitzung an, anzuhalten, bis die Anwendung beendet wird, so dass Sie nach Herzenslust editieren können, während Git fröhlich auf Sie wartet. %* übergibt alle Argumente für die Batch-Datei an Notepad++.

C:\src> echo %EDITOR%
C:\tools\runeditor.bat

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X