gVim jako edytor git pod cygwin

8

Używam msysgit i chciałbym mieć gvima jako mojego edytora git.

Używam cygwin bash zamiast git bash.

Bieganie

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

uruchamia gvim. Ale jeśli ustawię to jako edytor git:

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

i uruchom commit, otrzymuję:

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

W razie potrzeby dodaję ukośniki odwrotne:

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

To wciąż daje mi:

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

Chodzi o to, że mogę skopiować ciąg znaków po „nie można uruchomić” i wkleić go i działa. Wydaje mi się, że może to być spowodowane spacjami lub nawiasami w plikach programu (x86) (co do licha mieli na myśli?).

Ponieważ wydaje się, że cygwin sobie z tym radzi, pomyślałem, że mogę utworzyć dowiązanie symboliczne w powiedzmy / usr / local / bin, tak jak w mojej $ PATH i ustawić

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

Potwierdzam, że / usr / local / bin / gvim uruchamia gvim. Mimo to uruchomienie zatwierdzenia daje mi:

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

Wyłączanie core.editor i próby

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

daje mi ten sam błąd.

Ta odpowiedź SO sugeruje, że używam skryptu do otwarcia edytora.

Usuwam miękki link gvim.exe z / usr / local / bin i

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

$ chmod u+x gvim

Testuję uruchomienie skryptu, działa, uruchamia się gvim.

$ gvim

Niestety po uruchomieniu zatwierdzenia pojawia się błąd

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

Co mogę zrobić, aby używać gVim jako edytora git? Czy ktoś tego próbował? Czy popełniłem błędy? Muszę przyznać, że jestem nowicjuszem, jeśli chodzi o Linux.

Jasio
źródło
Czy zamiast tego próbowałeś użyć cygwin vi? Czy wypróbowałeś polecenie which gvim?
Somantra
które gvim wyprowadza / usr / local / bin / gvim, tylko gdy istnieje miękkie łącze lub skrypt. Prawdopodobnie powinienem podać wyraźniejszy powód, dla którego chciałem gVim. Używam go codziennie i skonfigurowałem tak, jak chcę. Jeśli użyję innego, będę musiał zachować dwa ustawienia edytora.
Johnny
Możesz rozważyć użycie dowiązań symbolicznych lub repozytorium dla swoich plików rc.
Somantra
Być może będziesz musiał to zrobić za pomocą pliku wsadowego zamiast skryptu powłoki cygwin. Uważaj również na konflikty zmiennych środowiskowych HOME między gVimem opartym na Windows i tym, co cgywin ustawi jako $ HOME.
Heptyt
@Heptite Próbowałem też utworzyć dla niego plik nietoperza. Brak szczęścia. Otrzymuję błąd „nie może się pojawiać” wymieniony w moim pytaniu. I masz rację co do konfliktów. Nie miałem konfliktów z gvim, ale z git. git config --global pod cygwin zapisuje do cygwin home, to samo pod msysgit zapisuje do windows home.
Johnny

Odpowiedzi:

6

git config wydaje się usuwać jeden poziom cudzysłowów, więc dodaj kolejny. Działa to dla mnie (z innym edytorem):

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

(Zwróć uwagę na cytowane znaki otaczające ścieżkę, powoduje to, że edytor jest uruchamiany za każdym razem, gdy np. Git commit ma postać „c: / Program Files (x86) /Vim/vim73/gvim.exe”, więc z cytatami informującymi powłokę bash nie próbuj interpretować () jako tego, co według niego oznacza.)

Legolas
źródło
0

Podczas pracy ze spacjami w ścieżkach dobrym pomysłem jest umieszczanie ich w cudzysłowach. To rozwiąże twój problem:

git config core.editor "/cygdrive/c/Program\ Files\ \(x86\)/Vim/vim73/gvim.exe"
p.vitzliputzli
źródło
Niestety nie. / cygdrive / c / Program \ Files \ (x86) /Vim/vim73/gvim.exe: / cygdrive / c / Program Files (x86) /Vim/vim73/gvim.exe: Błąd takiego pliku lub katalogu: nie można uruchomić / cygdrive / c / Program \ Files \ (x86) /Vim/vim73/gvim.exe: Brak takiego błędu pliku lub katalogu: Wystąpił problem z edytorem '/ cygdrive / c / Program \ Files \ (x86) / Vim / vim73 / gvim.exe ”. Ścieżka jest jednak poprawna, / cygdrive / c / Program \ Files \ (x86) /Vim/vim73/gvim.exe
johnny
Przepraszam, próbowałem z cygwinem, ale użyłem pakietu cygwin-git. Czy możesz mi powiedzieć, jak połączyłeś cygwin i msysgit?
p.vitzliputzli
Zainstalowałem msysgit i używałem git bash przez długi czas. Nie pamiętam dokładnie, dlaczego zacząłem używać cygwin, ale to, co zrobiłem (zrobiłem), to dodanie ścieżki do Git (/ cygdrive / c / Program Files (x86) / Git / bin) do mojego cygwina $ 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. Jeśli nie ma ścieżki, nie podawaj ścieżki

  2. Jeśli ścieżka jest pusta, podaj pustą ścieżkę

  3. Jeśli ścieżka jest względna, należy przekazać tak, jak jest

  4. Jeśli ścieżka jest bezwzględna, przekonwertuj na format Windows

Następnie ustawiam te zmienne:

export EDITOR=gvim.sh
export GIT_EDITOR='dash /usr/local/bin/gvim.sh'
  1. EDYTOR pozwala skryptowi współpracować z Git

  2. GIT_EDITOR pozwala skryptowi współpracować z poleceniami Hub

Źródło

Steven Penny
źródło