gVim como editor de git bajo cygwin

8

Uso msysgit y me gustaría tener gvim como mi editor de git.

Yo uso cygwin bash en lugar de git bash.

Corriendo

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

comienza gvim. Pero si configuro esto como editor git:

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

y ejecutar commit obtengo:

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

Luego agrego barras invertidas escapadas donde sea necesario:

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

Esto todavía me da:

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

La cuestión es que puedo copiar la cadena después de "no se puede ejecutar" y pegarla y se ejecuta. Supongo que podría ser causado por los espacios o los paréntesis en Archivos de programa (x86) (¿qué demonios estaban pensando?).

Como cygwin parece manejarlo bien, pensé que podría crear un enlace simbólico en say / usr / local / bin, ya que está en mi $ PATH y establecí

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

Confirmo que / usr / local / bin / gvim inicia gvim. Aún así, ejecutar un commit me da:

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

Desarmando core.editor e intentando

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

me da el mismo error

Esta respuesta SO sugiere que use un script para abrir el editor.

Elimino el enlace suave gvim.exe de / usr / local / bin y

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

$ chmod u+x gvim

Pruebo ejecutar el script, funciona, comienza gvim.

$ gvim

Desafortunadamente cuando ejecuto commit recibo un error

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

¿Qué puedo hacer para usar gVim como editor de git? ¿Alguien lo ha intentado? ¿He cometido errores? Debo admitir que soy un novato cuando se trata de Linux.

johnny
fuente
¿Has probado usar el cygwin vi en su lugar? ¿Has probado el comando which gvim?
Somantra
que gvim genera / usr / local / bin / gvim, solo cuando el enlace suave o el script están allí. Probablemente debería aclarar mi razón para querer gVim. Lo uso a diario y lo configuré como lo quiero. Si uso cualquier otro, tendré que mantener dos configuraciones de editores.
Johnny
Es posible que desee considerar usar enlaces simbólicos o un repositorio para sus archivos rc.
Somantra
Puede que tenga que hacer esto con un archivo por lotes en lugar de un script de shell cygwin. Además, tenga cuidado con los conflictos de variables ambientales de HOME entre gVim basado en Windows y lo que cgywin establecerá $ HOME como.
Heptita
@Heptite Intenté crear un archivo bat para él también. Sin suerte. Obtengo el error no se puede generar mencionado en mi pregunta. Y tienes razón sobre los conflictos. No he tenido conflictos con gvim sino con git. git config --global en cygwin guarda en cygwin home, lo mismo en msysgit guarda en windows home.
johnny

Respuestas:

6

git config parece eliminar un nivel de comillas, así que agrega otro. Esto funciona para mí (con otro editor):

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

(Tenga en cuenta las comillas escapadas que rodean la ruta, esto hace que el editor se inicie siempre que lo haga, por ejemplo, git commit para ser "c: / Archivos de programa (x86) /Vim/vim73/gvim.exe", por lo que con comillas que le dicen al bash shell que No intente interpretar el () como lo que sea que piense que esto significa).

Legolas
fuente
0

Cuando se trabaja con espacios en nombres de ruta, generalmente es una buena idea encapsularlos entre comillas. Esto resolverá su problema:

git config core.editor "/cygdrive/c/Program\ Files\ \(x86\)/Vim/vim73/gvim.exe"
p.vitzliputzli
fuente
Lamentablemente no. / cygdrive / c / Program \ Files \ (x86) /Vim/vim73/gvim.exe: / cygdrive / c / Archivos de programa (x86) /Vim/vim73/gvim.exe: No existe ese archivo o error de directorio: no se puede ejecutar / cygdrive / c / Program \ Files \ (x86) /Vim/vim73/gvim.exe: No existe tal archivo o error de directorio: Hubo un problema con el editor '/ cygdrive / c / Program \ Files \ (x86) / Vim / vim73 / gvim.exe '. Sin embargo, la ruta es correcta, / cygdrive / c / Programme \ Files \ (x86) /Vim/vim73/gvim.exe
johnny
Lo siento, lo probé con cygwin pero usé el paquete cygwin-git. ¿Podría decirme cómo conectó cygwin y msysgit?
p.vitzliputzli
Instalé msysgit y usé git bash durante mucho tiempo. No recuerdo exactamente por qué comencé a usar cygwin, pero lo que hice (hice) fue agregar la ruta a Git (/ cygdrive / c / Program Files (x86) / Git / bin) a mi 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 no hay ruta, no pase ninguna ruta

  2. Si la ruta está vacía, pase la ruta vacía

  3. Si la ruta es relativa, pase como está

  4. Si la ruta es absoluta, conviértala al formato de Windows

Luego establezco estas variables:

export EDITOR=gvim.sh
export GIT_EDITOR='dash /usr/local/bin/gvim.sh'
  1. EDITOR permite que el script funcione con Git

  2. GIT_EDITOR permite que el script funcione con comandos de Hub

Fuente

Steven Penny
fuente