gVim como editor git no cygwin

8

Eu uso o msysgit e gostaria de ter o gvim como meu editor de git.

Eu uso o cygwin bash em vez do git bash.

Corrida

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

inicia o gvim. Mas se eu definir isso como editor git:

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

e execute commit, recebo:

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

Em seguida, adiciono barras invertidas quando necessário:

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

Isso ainda me dá:

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

O problema é que eu posso copiar a sequência depois de "não pode ser executada" e colá-la e ela é executada. Eu acho que isso pode ser causado pelos espaços ou parênteses nos Arquivos de Programas (x86) (o que eles estavam pensando?).

Como o cygwin parece lidar bem, achei que poderia criar um link simbólico em / usr / local / bin, como está no meu $ PATH e defina

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

Confirmo que / usr / local / bin / gvim inicia o gvim. Ainda assim, executar um commit me 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'.

Desativando core.editor e tentando

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

me dá o mesmo erro.

Esta resposta do SO sugere que eu use um script para abrir o editor.

Eu removo o link flexível gvim.exe de / usr / local / bin e

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

$ chmod u+x gvim

Eu testo o script, ele funciona, o gvim inicia.

$ gvim

Infelizmente, quando executo commit, recebo um erro

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

O que posso fazer para usar o gVim como editor de git? Alguém já tentou? Eu cometi erros? Devo admitir ser um novato no que diz respeito ao Linux.

johnny
fonte
Você já tentou usar o cygwin vi? Você já tentou o comando which gvim?
Somantra 14/09
qual gvim gera / usr / local / bin / gvim, somente quando o link virtual ou o script está lá. Eu provavelmente deveria declarar mais claramente minha razão de querer o gVim. Eu uso diariamente e configurei como eu quero. Se eu usar outro, terei duas configurações de editores para manter.
johnny
Você pode considerar o uso de links simbólicos ou um repositório para seus arquivos rc.
Somantra 14/09/11
Talvez você precise fazer isso com um arquivo em lotes, e não com um script de shell cygwin. Além disso, cuidado com os conflitos de variáveis ​​ambientais HOME entre o gVim baseado no Windows e o que o cgywin definirá $ HOME como.
Heptite 14/09/11
@ Heptite Tentei criar um arquivo bat para ele também. Sem sorte Eu recebo o erro não pode aparecer mencionado na minha pergunta. E você está certo sobre os conflitos. Eu não tive conflitos com o gvim, mas com o git. git config --global sob o cygwin salva no cygwin home, o mesmo sob msysgit salva no windows home.
johnny

Respostas:

6

O git config parece remover um nível de aspas, então adicione outro. Isso funciona para mim (com outro editor):

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

(Observe as aspas vazias ao redor do caminho, isso faz com que o editor seja iniciado sempre que você fizer, por exemplo, git commit como "c: / Arquivos de Programas (x86) /Vim/vim73/gvim.exe", portanto, com aspas que digam ao shell bash para Não tente interpretar o () como ele pensa que isso significa.)

Legolas
fonte
0

Ao trabalhar com espaços em nomes de caminho, geralmente é uma boa idéia encapsulá-los entre aspas. Isto irá resolver o seu problema:

git config core.editor "/cygdrive/c/Program\ Files\ \(x86\)/Vim/vim73/gvim.exe"
p.vitzliputzli
fonte
Infelizmente não. / cygdrive / c / Programas \ Arquivos \ (x86) /Vim/vim73/gvim.exe: / cygdrive / c / Arquivos de programas (x86) /Vim/vim73/gvim.exe: Nenhum erro de arquivo ou diretório: não pode ser executado / cygdrive / c / Program \ Files \ (x86) /Vim/vim73/gvim.exe: nenhum erro de arquivo ou diretório: ocorreu um problema com o editor '/ cygdrive / c / Program \ Files \ (x86) / Vim / vim73 / gvim.exe '. O caminho está correto, porém, / cygdrive / c / Programa \ Files \ (x86) /Vim/vim73/gvim.exe
johnny
Sinto muito, tentei com o cygwin, mas usei o pacote cygwin-git. Você poderia me dizer como conectou o cygwin e o msysgit?
precisa saber é o seguinte
Instalei o msysgit e usei o git bash por um longo tempo. Não me lembro exatamente por que comecei a usar o cygwin, mas o que fiz foi adicionar o caminho para o Git (/ cygdrive / c / Arquivos de Programas (x86) / Git / bin) no meu 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 não houver caminho, não passe nenhum caminho

  2. Se o caminho estiver vazio, passe o caminho vazio

  3. Se o caminho for relativo, passe como está

  4. Se o caminho for absoluto, converta para o formato Windows

Então eu defino estas variáveis:

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

  2. GIT_EDITOR permite que o script funcione com os comandos do Hub

Fonte

Steven Penny
fonte