gVim als Git-Editor unter Cygwin


8

Ich benutze msysgit und möchte gvim als meinen git-Editor haben.

Ich benutze Cygwin Bash anstelle von Git Bash.

Laufen

$ /cygdrive/c/Program\ Files\ \(x86\)/Vim/vim73/gvim.exe 

startet gvim. Aber wenn ich das als Git-Editor einstelle:

$ git config core.editor /cygdrive/c/Program\ Files\ \(x86\)/Vim/vim73/gvim.exe

und führe Commit aus, das ich bekomme:

/cygdrive/c/Program Files (x86)/Vim/vim73/gvim.exe: -c: line 0: syntax error near unexpected token `('

Ich füge dann bei Bedarf maskierte Backslashes hinzu:

$ git config core.editor /cygdrive/c/Program\\\ Files\\\ \\\(x86\\\)/Vim/vim73/gvim.exe

Das gibt mir noch:

/cygdrive/c/Program\ Files\ \(x86\)/Vim/vim73/gvim.exe: /cygdrive/c/Program Files (x86)/Vim/vim73/gvim.exe: No such file or directory
error: cannot run /cygdrive/c/Program\ Files\ \(x86\)/Vim/vim73/gvim.exe: No such file or directory
error: There was a problem with the editor '/cygdrive/c/Program\ Files\ \(x86\)/Vim/vim73/gvim.exe'.

Die Sache ist, ich kann den String von nach "kann nicht laufen" kopieren und einfügen und es läuft. Ich denke, es könnte entweder durch die Leerzeichen oder die Klammern in den Programmdateien (x86) verursacht werden (was um alles in der Welt dachten sie?).

Da Cygwin damit klar zu kommen scheint, dachte ich mir, ich könnte einen Symlink in say / usr / local / bin erstellen, wie er in meinem $ PATH und Set enthalten ist

$ git config core.editor /usr/local/bin/gvim

Ich bestätige, dass / usr / local / bin / gvim gvim startet. Ein Commit führt mich jedoch dazu:

error: cannot spawn /usr/local/bin/gvim.exe: No such file or directory
error: There was a problem with the editor '/usr/local/bin/gvim.exe'.

Core.editor deaktivieren und versuchen

$ export GIT_EDITOR=/usr/local/bin/gvim.exe 

gibt mir den gleichen Fehler.

Diese SO-Antwort legt nahe, dass ich ein Skript verwende, um den Editor zu öffnen.

Ich entferne den Softlink gvim.exe aus / usr / local / bin und

$ cat > gvim
#!/bin/sh
/cygdrive/c/Program\ Files\ \(x86\)/Vim/vim73/gvim.exe

$ chmod u+x gvim

Ich teste das Skript, es funktioniert, gvim startet.

$ gvim

Leider erhalte ich beim Ausführen von Commit eine Fehlermeldung

$ git commit
error: cannot spawn /usr/local/bin/gvim: No such file or directory
error: There was a problem with the editor '/usr/local/bin/gvim'.

Was kann ich tun, um gVim als Git-Editor zu verwenden? Hat es jemand versucht? Habe ich fehler gemacht Ich muss zugeben, ein Anfänger zu sein, wenn es um Linux geht.


Haben Sie versucht, stattdessen den Cygwin vi zu verwenden? Haben Sie den Befehl ausprobiert which gvim?
Somantra

welches gvim / usr / local / bin / gvim ausgibt, nur wenn der Softlink oder das Skript vorhanden ist. Ich sollte wahrscheinlich klarer meinen Grund für den Wunsch nach gVim angeben. Ich benutze es täglich und habe es so eingerichtet, wie ich es will. Wenn ich eine andere verwende, muss ich zwei Editoreinstellungen beibehalten.
Johnny

Möglicherweise möchten Sie Symlinks oder ein Repo für Ihre RC-Dateien verwenden.
Somantra

Möglicherweise müssen Sie dies mit einer Batchdatei anstelle eines Cygwin-Shell-Skripts tun. Achten Sie auch auf Konflikte mit HOME-Umgebungsvariablen zwischen Windows-basiertem gVim und dem Wert, unter dem cgywin $ HOME festlegt.
Heptite

@Heptite Ich habe auch versucht, eine Bat-Datei dafür zu erstellen. Kein Glück. Ich erhalte den in meiner Frage erwähnten Fehler "Kann nicht erzeugen". Und Sie haben Recht mit den Konflikten. Ich hatte keine Konflikte mit gvim, sondern mit git. git config --global unter cygwin speichert in cygwin home, das gleiche unter msysgit speichert in windows home.
Johnny

Antworten:


6

git config scheint eine Ebene von Anführungszeichen zu entfernen, also fügen Sie eine weitere hinzu. Das funktioniert bei mir (mit einem anderen Editor):

git config core.editor "" c: / Programme (x86) /Vim/vim73/gvim.exe ""

(Beachten Sie die maskierten Anführungszeichen, die den Pfad umgeben. Dies führt dazu, dass der Editor immer dann gestartet wird, wenn Sie z. B. git commit als "c: / Program Files (x86) /Vim/vim73/gvim.exe" ausführen Versuchen Sie nicht, das () so zu interpretieren, wie es Ihrer Meinung nach bedeutet.)


0

Wenn Sie mit Leerzeichen in Pfadnamen arbeiten, ist es im Allgemeinen eine gute Idee, diese in Anführungszeichen zu setzen. Dies wird Ihr Problem lösen:

git config core.editor "/cygdrive/c/Program\ Files\ \(x86\)/Vim/vim73/gvim.exe"

Leider nicht. / cygdrive / c / Program \ Files \ (x86) /Vim/vim73/gvim.exe: / cygdrive / c / Programme (x86) /Vim/vim73/gvim.exe: Kein solcher Datei- oder Verzeichnisfehler: / kann nicht ausgeführt werden cygdrive / c / Program \ Files \ (x86) /Vim/vim73/gvim.exe: Kein solcher Datei- oder Verzeichnisfehler: Es gab ein Problem mit dem Editor '/ cygdrive / c / Program \ Files \ (x86) / Vim / vim73 / gvim.exe '. Der Weg ist richtig , aber / cygdrive / c / Program \ Files \ (x86) /Vim/vim73/gvim.exe
johnny

Es tut mir leid, ich habe es mit Cygwin versucht, aber ich habe das Cygwin-Git-Paket verwendet. Können Sie mir sagen, wie Sie Cygwin und Msysgit verbunden haben?
p.vitzliputzli

Ich habe msysgit installiert und lange Zeit git bash verwendet. Ich erinnere mich nicht genau, warum ich mit Cygwin angefangen habe, aber ich habe den Pfad zu Git (/ cygdrive / c / Programme (x86) / Git / bin) zu meinem Cygwin $ PATH hinzugefügt.
Johnny

0
#!/bin/dash -e
if [ "${1#/}" != "$1" ]
then k=$(cygpath -w "$1")
elif [ "$#" != 0 ]
then k=$1
fi
exec gvim ${k+"$k"}
  1. Wenn kein Pfad vorhanden ist, übergeben Sie keinen Pfad

  2. Wenn der Pfad leer ist, übergeben Sie den leeren Pfad

  3. Wenn der Pfad relativ ist, übergeben Sie ihn wie er ist

  4. Wenn der Pfad absolut ist, konvertieren Sie ihn in das Windows-Format

Dann setze ich diese Variablen:

export EDITOR=gvim.sh
export GIT_EDITOR='dash /usr/local/bin/gvim.sh'
  1. Mit EDITOR kann das Skript mit Git arbeiten

  2. Mit GIT_EDITOR kann das Skript mit Hub-Befehlen arbeiten

Quelle

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.