2015年9月更新(6年后)
git-for-Windows(2.5.3)的最新版本现在包括:
通过配置git config core.editor notepad
,用户现在可以notepad.exe
用作其默认编辑器。
配置git config format.commitMessageColumns 72
将由记事本包装器进行拾取,并在用户编辑提交消息后将其换行。
见提交69b301b由约翰内斯Schindelin( )dscho
。
Git 2.16(Q1 2018)将显示一条消息,告知用户在生成编辑器时正在等待用户完成编辑,以防编辑器打开到隐藏的窗口或模糊的地方而导致用户迷路。
参见commit abfb04d(2017年12月7日)和commits a64f213(2017年11月29日)作者Lars Schneider(larsxschneider
)。
帮助:Junio C Hamano(gitster
)。
(由Junio C gitster
Hamano合并--在commit 0c69a13中,2017年12月19日)
launch_editor()
:指示Git等待用户输入
当GIT_EDITOR
通过打开并等待用户输入(例如“ git rebase -i
”)的Git命令生成图形时,编辑器窗口可能会被其他窗口遮盖。
用户可能一直盯着原始的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 shell中使用。
(不是使用core.editor配置机制,其中包含“ start /WAIT...
” 的脚本将不起作用,而只能打开一个新的DOS窗口)
Bennett的答案提到可以避免添加脚本,而是直接在简单引号之间引用程序本身。注意斜线的方向!使用/
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
。
实际的解决方案(使用脚本)是要认识到:
您在配置文件中引用的实际上是shell(/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中进行操作。
Bot命令将触发一个新的notepad ++实例(因此带有-multiInst
'选项),并等待该实例关闭后再继续。
请注意,我仅使用'/',而不使用\
'。然后使用选项2安装了msysgit。(添加git\bin
目录到PATH
环境变量中,但不覆盖某些内置Windows工具)
notepad ++包装器称为.bat的事实并不重要。
最好将其命名为“ npp.sh”并将其放在[git]\cmd
目录中(或放置在PATH环境变量引用的任何目录中)。
也可以看看:
lightfire228添加了评论:
对于任何人问题,其中N ++只是打开一个空白文件,而git不接受您的提交消息,请参阅“ 由于空消息而中止提交 ”:将您的.bat
or .sh
文件更改为:
"<path-to-n++" .git/COMMIT_EDITMSG -<arguments>.
这将告诉notepad ++打开临时提交文件,而不是空白的新提交文件。