gVim come editor git sotto cygwin


8

Uso msysgit e vorrei avere gvim come editor di git.

Uso cygwin bash invece di git bash.

In esecuzione

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

avvia gvim. Ma se lo imposto come editor git:

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

ed eseguo il commit ottengo:

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

Aggiungo quindi barre rovesciate di escape dove necessario:

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

Questo mi dà ancora:

/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'.

Il fatto è che posso copiare la stringa da dopo "impossibile eseguirla" e incollarla e viene eseguita. Immagino che potrebbe essere causato dagli spazi o dalle parentesi in Programmi (x86) (cosa diavolo stavano pensando?).

Dato che cygwin sembra gestirlo bene, ho pensato di poter creare un link simbolico in dire / usr / local / bin, come è nel mio $ PATH e impostato

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

Confermo che / usr / local / bin / gvim avvia gvim. Tuttavia, eseguire un commit mi dà:

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 sconvolgente e provare

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

mi dà lo stesso errore.

Questa risposta SO mi suggerisce di usare uno script per aprire l'editor.

Rimuovo il soft link gvim.exe da / usr / local / bin e

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

$ chmod u+x gvim

Provo a eseguire lo script, funziona, gvim si avvia.

$ gvim

Sfortunatamente quando eseguo il commit, ricevo un errore

$ 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'.

Cosa posso fare per usare gVim come editor git? Qualcuno l'ha provato? Ho fatto errori? Devo ammettere di essere un principiante quando si tratta di Linux.


Hai provato a usare cygwin vi invece? Hai provato il comando which gvim?
Somantra,

quale gvim genera / usr / local / bin / gvim, solo quando c'è il soft link o lo script. Probabilmente dovrei dichiarare più chiaramente la mia ragione per volere gVim. Lo uso quotidianamente e l'ho impostato come lo desidero. Se ne uso un altro, avrò due impostazioni per gli editor da mantenere.
Johnny,

Potresti voler considerare l'utilizzo di symlink o un repository per i tuoi file rc.
Somantra,

Potrebbe essere necessario farlo con un file batch anziché con uno script della shell Cygwin. Inoltre, fai attenzione ai conflitti delle variabili ambientali HOME tra gVim basato su Windows e ciò che cgywin imposterà come $ HOME.
Heptite,

@Heptite Ho provato a creare un file bat anche per questo. Senza fortuna. Ottengo l'errore di spawn menzionato nella mia domanda. E hai ragione sui conflitti. Non ho avuto conflitti con gvim ma con git. git config --global sotto cygwin salva su cygwin home, lo stesso sotto msysgit salva su windows home.
johnny,

Risposte:


6

git config sembra rimuovere un livello di virgolette, quindi aggiungine un altro. Questo funziona per me (con un altro editor):

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

(Nota che le virgolette di escape che circondano il percorso fanno sì che l'editor avviato ogni volta che fai git commit sia "c: / Program Files (x86) /Vim/vim73/gvim.exe", quindi con le virgolette che indicano alla shell bash di non tentare di interpretare il () come qualunque cosa pensi significhi.)


0

Quando si lavora con spazi nei nomi dei percorsi, è generalmente una buona idea incapsularli tra virgolette. Questo risolverà il tuo problema:

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

Sfortunatamente no. / cygdrive / c / Program \ Files \ (x86) /Vim/vim73/gvim.exe: / cygdrive / c / Program Files (x86) /Vim/vim73/gvim.exe: nessun errore del file o della directory: impossibile eseguire / cygdrive / c / Program \ Files \ (x86) /Vim/vim73/gvim.exe: nessun errore di file o directory: si è verificato un problema con l'editor '/ cygdrive / c / Program \ Files \ (x86) / Vim / vim73 / gvim.exe'. Il percorso è corretto, tuttavia, / cygdrive / c / Program \ Files \ (x86) /Vim/vim73/gvim.exe
johnny,

Mi dispiace, l'ho provato con cygwin ma ho usato il pacchetto cygwin-git. Potresti dirmi come hai collegato cygwin e msysgit?
p.vitzliputzli,

Ho installato msysgit e usato git bash per molto tempo. Non ricordo esattamente perché ho iniziato a utilizzare cygwin, ma quello che ho fatto (faccio) è quello di aggiungere il percorso a Git (/ cygdrive / c / Programmi (x86) / Git / bin) al mio cygwin $ PATH.
johnny,

0
#!/bin/dash -e
if [ "${1#/}" != "$1" ]
then k=$(cygpath -w "$1")
elif [ "$#" != 0 ]
then k=$1
fi
exec gvim ${k+"$k"}
  1. Se nessun percorso, non passare alcun percorso

  2. Se il percorso è vuoto, passare un percorso vuoto

  3. Se il percorso è relativo, passare così com'è

  4. Se il percorso è assoluto, converti in formato Windows

Quindi ho impostato queste variabili:

export EDITOR=gvim.sh
export GIT_EDITOR='dash /usr/local/bin/gvim.sh'
  1. EDITOR consente allo script di funzionare con Git

  2. GIT_EDITOR consente allo script di funzionare con i comandi Hub

fonte

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.