gVim comme éditeur git sous cygwin


8

J'utilise msysgit et j'aimerais avoir gvim comme éditeur git.

J'utilise cygwin bash au lieu de git bash.

Fonctionnement

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

démarre gvim. Mais si je le configure comme éditeur git:

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

et exécutez commit je reçois:

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

J'ajoute ensuite des barres obliques inversées si nécessaire:

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

Cela me donne toujours:

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

Le fait est que je peux copier la chaîne après "ne peut pas fonctionner" et la coller et elle s'exécute. Je suppose que cela pourrait être causé par les espaces ou les parenthèses dans Program Files (x86) (à quoi pensaient-ils?).

Étant donné que cygwin semble le gérer, je me suis dit que je pouvais créer un lien symbolique dans / usr / local / bin, comme dans mon $ PATH et définir

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

Je confirme que / usr / local / bin / gvim démarre gvim. Pourtant, l'exécution d'un commit me donne:

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

Désinstaller core.editor et essayer

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

me donne la même erreur.

Cette réponse SO suggère que j'utilise un script pour ouvrir l'éditeur.

Je supprime le lien logiciel gvim.exe de / usr / local / bin et

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

$ chmod u+x gvim

Je teste le script, ça marche, gvim démarre.

$ gvim

Malheureusement, lorsque je lance la validation, j'obtiens une erreur

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

Que puis-je faire pour utiliser gVim comme éditeur git? Quelqu'un l'a-t-il essayé? Ai-je fait des erreurs? Je dois admettre que je suis novice en matière de Linux.


Avez-vous essayé d'utiliser le cygwin vi à la place? Avez-vous essayé la commande which gvim?
Somantra

qui gvim génère / usr / local / bin / gvim, uniquement lorsque le lien logiciel ou le script est là. Je devrais probablement expliquer plus clairement ma raison de vouloir gVim. Je l'utilise quotidiennement et l'ai installé comme je le veux. Si j'en utilise un autre, j'aurai deux paramètres d'éditeur à maintenir.
johnny

Vous voudrez peut-être envisager d'utiliser des liens symboliques ou un dépôt pour vos fichiers rc.
Somantra

Vous devrez peut-être le faire avec un fichier de commandes plutôt qu'avec un script shell cygwin. Méfiez-vous également des conflits de variables d'environnement HOME entre gVim basé sur Windows et ce que cgywin définira comme $ HOME.
Heptite

@Heptite J'ai également essayé de créer un fichier de chauve-souris pour cela. Pas de chance. J'obtiens l'erreur ne peut pas apparaître mentionnée dans ma question. Et vous avez raison sur les conflits. Je n'ai pas eu de conflits avec gvim mais avec git. git config --global sous cygwin enregistre dans cygwin home, de même sous msysgit enregistre dans windows home.
johnny

Réponses:


6

git config semble supprimer un niveau de guillemets, alors ajoutez-en un autre. Cela fonctionne pour moi (avec un autre éditeur):

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

(Notez les guillemets échappés entourant le chemin, cela fait que l'éditeur démarre chaque fois que vous faites par exemple git commit comme "c: / Program Files (x86) /Vim/vim73/gvim.exe", donc avec des guillemets qui disent au shell bash de n'essayez pas d'interpréter le () comme ce qu'il pense que cela signifie.)


0

Lorsque vous travaillez avec des espaces dans des noms de chemin, c'est généralement une bonne idée de les encapsuler entre guillemets. Cela résoudra votre problème:

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

Malheureusement non. / cygdrive / c / Program \ Files \ (x86) /Vim/vim73/gvim.exe: / cygdrive / c / Program Files (x86) /Vim/vim73/gvim.exe: aucune erreur de fichier ou de répertoire de ce type: impossible d'exécuter / cygdrive / c / Program \ Files \ (x86) /Vim/vim73/gvim.exe: aucune erreur de fichier ou de répertoire de ce type: il y a eu un problème avec l'éditeur '/ cygdrive / c / Program \ Files \ (x86) / Vim / vim73 / gvim.exe ». Le chemin est correct cependant, / cygdrive / c / Program \ Files \ (x86) /Vim/vim73/gvim.exe
johnny

Je suis désolé, je l'ai essayé avec cygwin mais j'ai utilisé le paquet cygwin-git. Pourriez-vous me dire comment vous avez connecté cygwin et msysgit?
p.vitzliputzli

J'ai installé msysgit et utilisé git bash pendant longtemps. Je ne me souviens pas exactement pourquoi j'ai commencé à utiliser cygwin, mais ce que j'ai fait (j'ajoute) est d'ajouter le chemin d'accès à Git (/ cygdrive / c / Program Files (x86) / Git / bin) à mon 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. Si aucun chemin, ne passez aucun chemin

  2. Si le chemin est vide, passez le chemin vide

  3. Si le chemin est relatif, passez tel quel

  4. Si le chemin est absolu, convertissez au format Windows

Ensuite, j'ai défini ces variables:

export EDITOR=gvim.sh
export GIT_EDITOR='dash /usr/local/bin/gvim.sh'
  1. EDITOR permet au script de fonctionner avec Git

  2. GIT_EDITOR permet au script de fonctionner avec les commandes Hub

La source

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.