Как я могу настроить редактор для работы с Git в Windows?

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

Терминал тупой, но не определен ни визуальный, ни редактор. Пожалуйста, укажите сообщение, используя опцию -m или -F.

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

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

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

37 ответов

Решение

Обновление сентябрь 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 г.) от Lars Schneider ( larsxschneider )
Помогает: Junio ​​C Hamano ( gitster )
(Объединено Юнио С Хамано - 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

Я предпочитаю не устанавливать переменную EDITOR, поэтому я попытался:

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)


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

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 ++ открыть файл временного коммита, а не пустой новый.

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

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,

Работает как шарм для меня.

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

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

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

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

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

Изменить: После обновления до 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, а обычная прямая косая черта.

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

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

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"

Word Pad!

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

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

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

Я также использую 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 пропустит путь к файлу с пробелами.

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

[core]
editor = 'C:\\Program files\\path\\to\\editor.exe'

Благодаря 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 "$*"

Это 1 симптом более серьезных проблем. Примечательно, что у вас есть что-то, устанавливающее TERM= тупой. Другие вещи, которые не работают должным образом, являются less команда, которая говорит, что у вас нет полностью функционального терминала. Похоже, что это чаще всего вызвано тем, что в ваших глобальных переменных среды Windows установлено значение TERM. Для меня проблема возникла, когда я установил Strawberry Perl, некоторая информация об этом содержится в сообщении об ошибке msysgit для этой проблемы, а также о нескольких решениях.

Первое решение - это исправить это в вашем ~/.bashrc, добавив:

export TERM=msys

Вы можете сделать это из приглашения Git BASH следующим образом:

echo "export TERM=msys" >> ~/.bashrc

Другое решение, которое, в конечном счете, и есть то, что я сделал, потому что меня не волнуют причины, по которым Strawberry Perl добавил TERM=dumb в мои настройки среды, - это пойти и удалить TERM=dumb, как указано в этом комментарии к сообщению об ошибке msysgit.

Панель управления / Система / Дополнительно / Переменные среды... (или аналогичные, в зависимости от вашей версии Windows) - это то место, где в Windows задаются переменные среды. По умолчанию TERM не установлен. Если там установлен TERM, то вы (или одна из установленных вами программ - например, Strawberry Perl) установили его. Удалите этот параметр, и все будет в порядке.

Точно так же, если вы используете Strawberry Perl и заботитесь о клиенте CPAN или о чем-то подобном, вы можете оставить TERM=dumb один и использовать unset TERM в вашем файле ~/.bashrc, который будет иметь эффект, аналогичный приведенному выше.

Конечно, все другие решения правильны, что вы можете использовать git config --global core.editor $MYFAVORITEEDITOR чтобы убедиться, что git использует ваш любимый редактор, когда ему нужно запустить его для вас.

Vim/Gvim хорошо работает для меня.

>echo %EDITOR%

c:\Vim\Vim71\vim.exe

Мне нужно было выполнить оба следующих действия, чтобы заставить git запустить notepad++ в windoze:

-добавить следующее.gitconfig:

editor = 'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin

- измените ярлык, чтобы запустить оболочку git bash для запуска от имени администратора, а затем используйте ее для запуска оболочки git bash. Я догадывался, что пункт контекстного меню "Git Bash here" не запускал npp с необходимыми разрешениями.

После того как все вышеперечисленное сработало.

У меня PortableGit 1.6 работал нормально, но после обновления до PortableGit-1.7 у Windows были проблемы. Некоторые команды git открывают Notepad++. Exe нормально, но некоторые нет, особенно git rebase ведет себя по-разному.

Проблема в том, что некоторые команды запускают процесс windows cmd, некоторые используют процесс unix cmd. Я хочу дать атрибуты запуска редактору Notepad ++, поэтому мне нужно иметь собственный скрипт. Мое решение заключается в следующем.

1) Создать скрипт для запуска соответствующего текстового редактора. Скрипт выглядит странно, но обрабатывает как Windows, так и Unix-варианты. с: /PortableGit/cmd/git-editor.bat

#!/bin/sh
#open a new instance

function doUnix() {
  "c:\program files\notepad++\notepad++.exe" -multiInst -nosession -notabbar $*
  exit
}

doUnix $*

:WINCALL
"c:\program files\notepad++\notepad++.exe" -multiInst -nosession -notabbar %*

2) Задайте глобальную переменную core.editor. Сценарий был сохранен в папке git/cmd, чтобы он уже находился в пути к gitconsole, это обязательно, поскольку полный путь может работать неправильно.

git config --global core.editor "git-editor.bat"

Теперь я могу запускать мастер- команды git commit -a и git rebase -i. Попробуйте, если у вас есть проблемы с инструментом Git Windows.

Допустим, вы хотите настроить VsCode в качестве редактора. Сделайте следующее:

Добавьте следующие строки в ваш файл:

Расположение по умолчанию .gitconfigфайл C:\Users\USER_NAME\.gitconfig

      [core]
  editor = code -w -n
[diff]
  tool = vscode
[difftool "vscode"]
  cmd = code -w -n --diff $LOCAL $REMOTE
[merge]
  tool = vscode
[mergetool "vscode"]
  cmd = code -w -n $MERGED

ПРИМЕЧАНИЕ:

  • -wявляется обязательным и говорит дождаться загрузки vscode .
  • -nявляется необязательным и сообщает gitчтобы открыть vscode в новом окне.

Если вы хотите настроить собственный путь к редактору в Windows:

Вам нужно заменить слово codeс путем к «.exe» VsCode .

Например:

      [core]
  editor = "'C:/Users/Tal/AppData/Local/Programs/Microsoft VS Code/Code.exe'" -w -n
[diff]
  tool = vscode
[difftool "vscode"]
  cmd = "'C:/Users/Tal/AppData/Local/Programs/Microsoft VS Code/Code.exe'" -w -n --diff $LOCAL $REMOTE
[merge]
  tool = vscode
[mergetool "vscode"]
  cmd = "'C:/Users/Tal/AppData/Local/Programs/Microsoft VS Code/Code.exe'" -w -n $MERGED

Примечание:

  • Вам нужно окружить путь одинарными кавычками ''.
  • Косая черта в пути должна быть прямой косой чертой /.

Или другой пример:

      [core]
    editor = \"C:\\Users\\Tal\\AppData\\Local\\Programs\\Microsoft VS Code\\Code.exe\" -w -n

[diff]
    tool = vscode
[difftool "vscode"]
    cmd = \"C:\\Users\\Tal\\AppData\\Local\\Programs\\Microsoft VS Code\\Code.exe\" -w -n --diff $LOCAL $REMOTE

[merge]
    tool = vscode
[mergetool "vscode"]
    cmd = \"C:\\Users\\Tal\\AppData\\Local\\Programs\\Microsoft VS Code\\Code.exe\" -w -n $MERGED

Основываясь на предложении VonC выше, это работало для меня (сводило меня с ума):

git config --global core.editor "'C:/Program Files (x86)/Sublime Text 3/subl.exe' -wait"

Опуская -wait может вызвать проблемы, особенно если вы работаете с gerrit и меняете идентификаторы, которые необходимо скопировать вручную в конец вашего сообщения о коммите

Я использую git на нескольких платформах, и мне нравится использовать одинаковые настройки git на всех них. (На самом деле, все мои конфигурационные файлы находятся под контролем релиза с помощью git, и я поставил клон репозитория git на каждую машину.) Решение, которое я придумал, заключается в следующем:

Я установил мой редактор на giteditor

git config --global core.editor giteditor

Затем я создаю символическую ссылку под названием giteditor, которая находится в моем PATH. (У меня есть личный каталог bin, но в любом месте в PATH работает.) Эта ссылка указывает на мой текущий редактор по выбору. На разных машинах и разных платформах я использую разные редакторы, так что это означает, что мне не нужно менять свою универсальную конфигурацию git (.gitconfig), только ссылку, на которую указывает giteditor.

Символические ссылки обрабатываются каждой операционной системой, о которой я знаю, хотя они могут использовать разные команды. Для Linux вы используете ln -s. Для Windows вы используете встроенный в mklink cmd. У них разные синтаксисы (которые вы должны искать), но на самом деле все работает одинаково.

Я использую Cygwin на Windows, поэтому я использую:

export EDITOR="emacs -nw"

-nw для no-windowsто есть сказать Emacs не пытаться использовать X11.

Привязки клавиш Emacs не работают для меня из оболочки Windows, поэтому я бы использовал это только из оболочки Cygwin... (рекомендуется rxvt.)

Это моя установка использовать Geany в качестве редактора для git:

git config --global core.editor C:/path/to/geany.bat

со следующим содержанием в geany.bat:

#!/bin/sh
"C:\Program Files\Geany\bin\Geany.exe" --new-instance "$*"

Он работает как в консоли DOS, так и в msysgit.

Мне было трудно заставить git сотрудничать с WordPad, KomodoEdit и почти со всеми другими редакторами, которые я им предоставляю. Большинство открыто для редактирования, но git явно не ждет, когда произойдет сохранение / закрытие.

Как костыль, я просто делал то есть

git commit -m "Fixed the LoadAll method"

держать вещи в движении. Имеет тенденцию держать мои сообщения коммита немного короче, чем они, вероятно, должны быть, но ясно, что есть некоторая работа, которая должна быть сделана над версией git для Windows.

GitGUI также не так уж и плох. Требуется немного ориентации, но после этого это работает довольно хорошо.

Похоже, что Git не найдет редактор, если в пути есть пробелы. Таким образом, вам придется поместить пакетный файл, упомянутый в ответе Патрика, в путь без пробелов.

Я предпочитаю использовать emacs. Настройка может быть немного сложнее.

  1. Скачайте emacs и распакуйте его где-нибудь как c:\emacs,
  2. Бежать c:\emacs\bin\addpm.exe, Вам нужно щелкнуть правой кнопкой мыши и "Запуск от имени администратора", если вы используете Windows Vista или выше. Это поместит исполняемые файлы на вашем пути.
  3. добавлять (server-start) где-то в вашем .emacs файл. Смотрите FAQ по Emacs для Windows, чтобы узнать, где разместить .emacs файл.
  4. git config --global core.editor emacsclientw

Git теперь будет открывать файлы в существующем процессе emacs. Вам придется запустить этот существующий процесс вручную из c:\emacs\bin\runemacs.exe,

Оказывается, в книге Pro Git есть приложение , посвященное именно этому вопросу для любой ОС! Они не перечисляют каждый редактор, но заменяют исполняемый файл в настройках примера на тот, который установлен в вашей системе.

Я использую GitHub для Windows, который является хорошим визуальным вариантом. Но я также предпочитаю командную строку, поэтому, чтобы она работала при открытии репозитория в оболочке Git, я просто установил следующее:

git config --global core.editor vim

который прекрасно работает

Это работает для Powershell и cmder-1.2 (при использовании с powershell). В ~/.gitconfig

[core]
    editor = 'c:/program files/sublime text 3/subl.exe' -w

Как я могу сделать Sublime Text редактором по умолчанию для Git?

Мне удалось заставить работать версию среды, установив переменную EDITOR с помощью кавычек и /:

EDITOR="c:/Program Files (x86)/Notepad++/notepad++.exe"

У меня была та же проблема, и я нашел другое решение. Я получал

error: There was a problem with the editor 'ec'

у меня есть VISUAL=ecи командный файл с именем ec.bat на моем пути, который содержит одну строку:

c:\emacs\emacs-23.1\bin\emacsclient.exe %*

Это позволяет мне редактировать файлы из командной строки с помощью ec <filename>и наличие визуального набора означает, что большинство unixy-программ тоже его подберут. Git, похоже, ищет путь иначе, чем другие мои команды - когда я смотрел на git commit в ProcMon я видел, как это выглядит в каждой папке на пути к ec и для ec.exe, но не для ec.bat, Я добавил другую переменную среды (GIT_EDITOR=ec.bat) и все было хорошо.

добавить возвышенного git config --global core.editor "'C:\Program Files\Sublime Text 3\sublime_text.exe'"

Я решил аналогичную проблему, используя переменную и notepad2 как редактор.

Решение 1. Установите для переменной среды значение C:/tools/notepad2.exe. Это работает нормально, но git жалуется, если сообщение фиксации содержит символы, отличные от ASCII.

Решение 2: Установить GIT_EDITOR к C:/tools/notepad2.exe //utf8. Обратите внимание на двойную косую черту перед переключателем программ. КСТАТИ: -utf8 тоже сработало бы.

Воскрешая старую ветку, но я нашел здесь очень простое решение - хотя может быть ошибка в пути, по которому вам нужно скопировать файл subl, указанный автором. Я использую Win 7 x64, и мне пришлось поместить файл "subl" в мой /Git/cmd/ папка, чтобы она работала. Это работает как шарм, хотя.

Другие вопросы по тегам