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.