Как я могу настроить редактор для работы с Git в Windows? - PullRequest
532 голосов
/ 14 августа 2008

Я пробую Git на Windows . Я дошел до попытки "git commit" и получил эту ошибку:

Терминал тупой, но не визуальный, ни РЕДАКТОР определен. Пожалуйста, предоставьте сообщение с использованием опции -m или -F.

Итак, я понял, что мне нужна переменная окружения с именем EDITOR. Нет проблем. Я установил это, чтобы указать на Блокнот. Это сработало почти. Сообщение о фиксации по умолчанию открывается в Блокноте. Но Блокнот не поддерживает прямые переводы строк. Я вышел и получил Notepad ++ , но я не могу понять, как настроить Notepad ++ как %EDITOR% таким образом, чтобы он работал с Git, как и ожидалось.

Я не женат на Notepad ++. На данный момент я не против, какой редактор я использую. Я просто хочу иметь возможность вводить сообщения коммита в редакторе , а не в командной строке (с -m).

Те из вас, кто использует Git в Windows: Какой инструмент вы используете для редактирования сообщений коммита и что вам нужно было сделать, чтобы он работал?

Ответы [ 32 ]

536 голосов
/ 21 апреля 2009

Обновление сентябрь 2015 (6 лет спустя)

Последний выпуск git-for-Windows (2.5.3) теперь включает в себя:

Настроив git config core.editor notepad, пользователи теперь могут использовать notepad.exe в качестве редактора по умолчанию .
Конфигурация git config format.commitMessageColumns 72 будет подхвачена блокнотом-блокнотом и перенесет сообщение о фиксации строки после того, как пользователь отредактирует его.

См. коммит 69b301b от Йоханнес Шинделин (dscho) .

И Git 2.16 (Q1 2018) покажет сообщение, сообщающее пользователю, что он ожидает, когда пользователь закончит редактирование при порождении редактора, в случае, если редактор открывается в скрытое окно или где-то неясное, и пользователь получает потерял.

См. коммит abfb04d (07 декабря 2017 г.) и коммит a64f213 (29 ноября 2017 г.) от Ларс Шнайдер (larsxschneider) .
Помощник: Джунио С Хамано (gitster) .
(Объединено с Junio ​​C Hamano - gitster - в коммит 0c69a13 , 19 декабря 2017 г.)

launch_editor(): указать, что Git ожидает ввода пользователя

Когда графический элемент GIT_EDITOR создается командой Git, которая открывается и ожидает ввода пользователя (например, "git rebase -i"), затем окно редактора может быть скрыт другими окнами.
Пользователь может смотреть на оригинальное окно терминала Git, даже не понимая, что ему / ей нужно взаимодействовать с другим окном, прежде чем Git сможет продолжить. Этому пользователю Git появляется висит.

Распечатать сообщение о том, что Git ждет ввода редактора в оригинале терминал и избавиться от него, когда редактор возвращается, если терминал поддерживает стирание последней строки


Оригинальный ответ

Я только что протестировал его с git версии 1.6.2.msysgit.0.186.gf7512 и Notepad ++ 5.3.1

Я предпочитаю , а не , чтобы установить переменную РЕДАКТОРА, поэтому я попытался:

git config --global core.editor "\"c:\Program Files\Notepad++\notepad++.exe\""
# or
git config --global core.editor "\"c:\Program Files\Notepad++\notepad++.exe\" %*"

Это всегда дает:

C:\prog\git>git config --global --edit
"c:\Program Files\Notepad++\notepad++.exe" %*: c:\Program Files\Notepad++\notepad++.exe: command not found
error: There was a problem with the editor '"c:\Program Files\Notepad++\notepad++.exe" %*'.

Если я определю npp.bat, включая:

"c:\Program Files\Notepad++\notepad++.exe" %*

и я печатаю:

C:\prog\git>git config --global core.editor C:\prog\git\npp.bat

Он работает только из сеанса DOS, , но не из оболочки git .
(не то, что с механизмом конфигурации core.editor, скрипт с "start /WAIT..." не будет работать, а только откроет новое окно DOS)


В ответе Беннетта упоминается возможность избежать добавления скрипта, но непосредственно ссылаться на саму программу между простыми кавычками . Обратите внимание на направление косых черт! Используйте / NOT \ для разделения папок в имени пути!

git config --global core.editor \
"'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"

Или, если вы работаете в 64-битной системе:

git config --global core.editor \
"'C:/Program Files (x86)/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"

Но я предпочитаю использовать скрипт (см. Ниже): таким образом я могу играть с разными путями или разными вариантами без необходимости заново регистрировать git config.


Фактическим решением (со сценарием) было понять, что:
в конфигурационном файле вы ссылаетесь на сценарий оболочки (/bin/sh) , а не на сценарий DOS.

Так что же работает:

C:\prog\git>git config --global core.editor C:/prog/git/npp.bat

с C:/prog/git/npp.bat:

#!/bin/sh
"c:/Program Files/Notepad++/notepad++.exe" -multiInst "$*"

или

#!/bin/sh
"c:/Program Files/Notepad++/notepad++.exe" -multiInst -notabbar -nosession -noPlugin "$*"

С этой настройкой я могу сделать 'git config --global --edit' из DOS или Git Shell, или я могу сделать 'git rebase -i ...' из DOS или Git Shell.
Команды бота вызовут новый экземпляр notepad ++ (отсюда и опция -multiInst ') и будут ждать закрытия этого экземпляра, прежде чем продолжить.

Обратите внимание, что я использую только '/', а не \ '. И я установил msysgit, используя опцию 2. (Добавьте каталог git\bin в переменную окружения PATH, но не переопределяя некоторые встроенные инструменты Windows)

Тот факт, что оболочка notepad ++ называется .bat, не важен.
Было бы лучше назвать его npp.sh и поместить его в каталог [git]\cmd (или в любой каталог, указанный в переменной окружения PATH).


Смотри также:


lightfire228 добавляет в комментарии :

Если у вас возникли проблемы, когда N ++ просто открывает пустой файл, а git не принимает ваше сообщение о коммите, см. « Отмена фиксации из-за пустого сообщения »: измените .bat или .sh файл, чтобы сказать:

"<path-to-n++" .git/COMMIT_EDITMSG -<arguments>. 

Это скажет notepad ++ открыть файл временного коммита, а не новый пустой файл.

282 голосов
/ 16 сентября 2009

Опираясь на Ответ Даррена , чтобы использовать Блокнот ++, вы можете просто сделать это (все в одной строке):

git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"

Очевидно, что часть C:/Program Files/Notepad++/notepad++.exe должна быть путем к исполняемому файлу Notepad ++ в вашей системе. Например, это может быть C:/Program Files (x86)/Notepad++/notepad++.exe.

Работает как очарование для меня.

48 голосов
/ 05 июля 2009

Во всяком случае, я только что поиграл с этим и нашел следующее, чтобы работать хорошо для меня:

git config --global core.editor "'C:/Program Files/TextPad 5/TextPad.exe' -m"

Я не думаю, что CMD любит одинарные кавычки, поэтому вы должны использовать двойные кавычки "для указания аргумента встроенной строки пробела".

Cygwin (который, я считаю, является основной платформой для Git's Bash), с другой стороны, любит и ', и "; Вы можете указать CMD-подобные пути, используя / вместо \, при условии, что строка заключена в кавычки, т.е. в этом случае, используя одинарные кавычки.

-m переопределяет / указывает на использование нескольких редакторов, и нет необходимости в %*, прикрепленном к концу.

25 голосов
/ 11 января 2011

Редактировать: После обновления до vim 7.3 я пришел к выводу, что самый простой и простой способ сделать это:

  1. Добавьте основную папку Vim на свой путь (щелкните правой кнопкой мыши на Мой компьютер -> Свойства -> Дополнительно -> Переменные среды)

  2. Запустите это: git config --global core.editor "gvim --nofork '%*'"

Если вы сделаете это таким образом, то я вполне уверен, что это будет работать и с Cygwin.

Оригинальный ответ:

Даже с парой ответов, связанных с vim, у меня были проблемы с настройкой работы с gvim под Windows (без использования пакетного файла,% EDITOR% или cygwin).

То, к чему я в итоге пришел, красиво и чисто, и оно опирается на некоторые решения здесь:

git config --global core.editor \
"'C:/Program Files/Vim/vim72/gvim.exe' --nofork '%*'"

Одна хитрость, которая заняла у меня некоторое время, это то, что это не обратная косая черта в стиле Windows, а обычная косая черта.

15 голосов
/ 14 августа 2008

Notepad ++ работает просто отлично, хотя я предпочитаю придерживаться Notepad, -m или даже иногда встроенным «редактировать».

Проблема, с которой вы сталкиваетесь при использовании Notepad ++, связана с тем, как git запускает исполняемый файл редактора. Мое решение для этого состоит в том, чтобы установить EDITOR для пакетного файла, а не для фактического исполняемого файла редактора, который выполняет следующие действия:

start /WAIT "E:\PortableApps\Notepad++Portable\Notepad++Portable.exe" %*

/ WAIT предписывает сеансу командной строки прекратить работу, пока приложение не закроется, поэтому вы сможете редактировать содержимое в соответствии с вашими пожеланиями, пока git с радостью ждет вас. % * передает все аргументы в пакетный файл в Notepad ++.

c:\src>echo %EDITOR%
c:\tools\runeditor.bat
10 голосов
/ 06 августа 2010

Wordpad!

Я рад, что использую vim, но, поскольку я пытаюсь представить Git компании, я хотел чего-то такого, что у всех нас есть, и обнаружил, что Wordpad работает нормально (то есть Git ждет, пока вы не закончите редактирование и закрытие окна).

git config core.editor '"C:\Program Files\Windows NT\Accessories\wordpad.exe"'

Это использует Git Bash на msysgit; Я не пробовал из командной строки Windows (если это что-то меняет).

9 голосов
/ 15 октября 2009

Я также использую Cygwin в Windows, но с gvim (в отличие от терминального vim).

Чтобы сделать эту работу, я сделал следующее:

  1. Создан командный файл в одну строку (с именем git_editor.bat), который содержит следующее:
    "C:/Program Files/Vim/vim72/gvim.exe" --nofork "%*"
  2. Размещено git_editor.bat в моем PATH.
  3. Набор GIT_EDITOR=git_editor.bat

После этого git commit и т. Д. Будут корректно вызывать исполняемый файл gvim.

ПРИМЕЧАНИЕ 1. Параметр --nofork для gvim обеспечивает его блокировку до тех пор, пока не будет записано сообщение о фиксации.

ПРИМЕЧАНИЕ 2. Кавычки вокруг пути к gvim требуются, если в пути есть пробелы.

ПРИМЕЧАНИЕ 3: Кавычки вокруг "% *" необходимы на случай, если git пропустит путь к файлу с пробелами.

8 голосов
/ 26 сентября 2011

Благодаря сообществу SO ... и небольшому исследованию я смог получить свой любимый редактор, EditPadPro , работать в качестве основного редактора с msysgit 1.7.5.GIT и TortoiseGit v1.7.3.0 поверх WinXP SP3 ...

Следуя приведенному выше совету, я добавил путь к bash-скрипту для редактора кода ...

git config --global core.editor c:/msysgit/cmd/epp.sh

Однако после нескольких неудачных попыток вышеупомянутых решений ... Я наконец смог заставить это работать. Согласно документации EditPadPro, добавление флага '/ newinstance' позволит оболочке ожидать ввода редактора ....

Флаг ' / newinstance ' был ключевым в моем случае ...

#!/bin/sh
"C:/Program Files/JGsoft/EditPadPro6/EditPadPro.exe" //newinstance "$*"
6 голосов
/ 06 октября 2016

Для Атом Вы можете сделать

git config --global core.editor "atom --wait"

и аналогичные для VSCode

git config --global core.editor "code --wait"

, который откроет окно Atom или VSCode для фиксации,

или Возвышенный

git config --global core.editor "subl -n -w"
6 голосов
/ 13 января 2017

Отредактируйте файл .gitconfig в папке c: \ Users \ YourUser и добавьте:

[core]
editor = 'C:\\Program files\\path\\to\\editor.exe'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...