gVim как редактор git под cygwin

8

Я использую msysgit и хотел бы, чтобы gvim был моим редактором git.

Я использую Cygwin Bash вместо Git Bash.

Бег

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

начинает гвим. Но если я установлю это как редактор git:

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

и запустить коммит я получаю:

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

Затем я добавляю экранированные обратные слеши, где это необходимо:

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

Это все еще дает мне:

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

Дело в том, что я могу скопировать строку после «не могу запустить» и вставить ее, и она запускается. Я думаю, это может быть вызвано пробелами или круглыми скобками в Program Files (x86) (о чем они вообще думали?).

Так как cygwin, кажется, справляется с этим, я решил создать символическую ссылку, скажем, в / usr / local / bin, как в моем $ PATH, и установить

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

Я подтверждаю, что / usr / local / bin / gvim запускает gvim. Тем не менее, выполнение коммита дает мне:

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 и попытки

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

дает мне ту же ошибку.

Этот SO ответ предполагает, что я использую скрипт для открытия редактора.

Я удаляю программную ссылку gvim.exe из / usr / local / bin и

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

$ chmod u+x gvim

Я тестирую, запускаю скрипт, он работает, gvim запускается.

$ gvim

К сожалению, когда я запускаю коммит, я получаю ошибку

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

Что я могу сделать, чтобы использовать gVim в качестве редактора git? Кто-нибудь пробовал это? Я сделал ошибки? Я должен признать, что был новичком, когда дело доходит до Linux.

Джонни
источник
Вы пытались использовать Cygwin VI вместо этого? Вы пробовали команду which gvim?
Сомантра
который gvim выводит / usr / local / bin / gvim, только когда есть софт-ссылка или скрипт. Я, наверное, должен более четко изложить причину, по которой я хочу получить gVim. Я использую его ежедневно и настроил так, как хочу. Если я использую любой другой, у меня будет две настройки редактора для поддержки.
Джонни
Вы можете рассмотреть возможность использования символических ссылок или репозитория для ваших файлов RC.
Сомантра
Возможно, вам придется сделать это с помощью командного файла, а не сценария оболочки Cygwin. Кроме того, остерегайтесь конфликтов переменных среды HOME между gVim на базе Windows и тем, что cgywin установит как $ HOME.
Гепт
@ Hepite Я тоже пытался создать для нее файл bat. Не повезло. Я получаю ошибку, которая не может появиться в моем вопросе. И ты прав насчет конфликтов. У меня не было конфликтов с gvim, но с git. git config --global под cygwin сохраняет в cygwin home, то же самое при msysgit сохраняет в windows home.
Джонни

Ответы:

6

git config, кажется, удаляет один уровень кавычек, поэтому добавьте другой. Это работает для меня (с другим редактором):

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

(Обратите внимание на экранированные кавычки, окружающие путь, это приводит к тому, что редактор запускается всякий раз, когда вы делаете, например, git commit будет «c: / Program Files (x86) /Vim/vim73/gvim.exe», то есть с кавычками, которые сообщают оболочке bash: не пытайтесь интерпретировать () как бы то ни было.)

Леголас
источник
0

При работе с пробелами в путевых именах, как правило, рекомендуется заключать их в кавычки. Это решит вашу проблему:

git config core.editor "/cygdrive/c/Program\ Files\ \(x86\)/Vim/vim73/gvim.exe"
p.vitzliputzli
источник
К сожалению нет. / cygdrive / c / Program \ Files \ (x86) /Vim/vim73/gvim.exe: / cygdrive / c / Program Files (x86) /Vim/vim73/gvim.exe: Нет такого файла или ошибка каталога: невозможно запустить / cygdrive / c / Program \ Files \ (x86) /Vim/vim73/gvim.exe: Нет такого файла или ошибки каталога: возникла проблема с редактором / cygdrive / c / Program \ Files \ (x86) / Vim / vim73 / gvim.exe. Правильный путь , хотя, / cygdrive / с / Program \ Files \ (x86) /Vim/vim73/gvim.exe
джонни
Извините, я попробовал это с cygwin, но я использовал пакет cygwin-git. Не могли бы вы рассказать мне, как вы связали Cygwin и msysgit?
p.vitzliputzli
Я установил msysgit и долго использовал git bash. Я точно не помню, почему я начал использовать cygwin, но я сделал (и сделал) то, что я добавил путь к Git (/ cygdrive / c / Program Files (x86) / Git / bin) к своему cygwin $ PATH.
Джонни
0
#!/bin/dash -e
if [ "${1#/}" != "$1" ]
then k=$(cygpath -w "$1")
elif [ "$#" != 0 ]
then k=$1
fi
exec gvim ${k+"$k"}
  1. Если нет пути, не передайте путь

  2. Если путь пуст, пропустите пустой путь

  3. Если путь относительный, передайте как есть

  4. Если путь абсолютный, конвертировать в формат Windows

Затем я установил эти переменные:

export EDITOR=gvim.sh
export GIT_EDITOR='dash /usr/local/bin/gvim.sh'
  1. РЕДАКТОР позволяет скрипту работать с Git

  2. GIT_EDITOR позволяет скрипту работать с командами Hub

Источник

Стивен Пенни
источник