我正在 Windows 上试用 Git 。我到了尝试“git commit”的地步,但出现了这个错误:
终端是哑的,但没有定义 VISUAL 或 EDITOR。请使用 -m 或 -F 选项提供消息。
所以我发现我需要一个名为 EDITOR 的环境变量。没问题。我将其设置为指向记事本。这几乎奏效了。默认提交消息在记事本中打开。但记事本不支持裸换行。我出去买了Notepad++,但我不知道如何将 Notepad++ 设置为%EDITOR%它可以按预期与 Git 一起使用。
%EDITOR%
我没有嫁给记事本++。在这一点上,我不介意我使用什么编辑器。我只想能够 在编辑器中输入提交消息, 而不是在命令行(使用-m)。
-m
那些在 Windows 上使用 Git 的人:你用什么工具来编辑你的提交消息,你必须做什么才能让它工作?
2015 年 9 月更新(6 年后)
git-for-Windows (2.5.3)的最新版本现在包括:
通过配置 git config core.editor notepad ,用户现在可以notepad.exe用作他们的默认编辑器。 配置git config format.commitMessageColumns 72将由记事本包装器拾取,并在用户编辑提交消息后对其进行换行。
git config core.editor notepad
notepad.exe
git config format.commitMessageColumns 72
请参阅Johannes Schindelin ( )的提交 69b301b。dscho
dscho
并且 Git 2.16(2018 年第一季度)将显示一条消息,告诉用户它在生成编辑器时正在等待用户完成编辑,以防编辑器打开到隐藏窗口或模糊的地方而用户迷路。
请参阅提交 a64f213(2017年 11 月 29 日)由Lars Schneider ( )提交 a64f213 (2017 年 12 月 7 日) 。 帮助者:Junio C Hamano ( )。(由Junio C Hamano 合并——在提交 0c69a13中,2017 年 12 月 19 日)larsxschneider gitster gitster
larsxschneider
gitster
launch_editor(): 表示 Git 等待用户输入 当图形GIT_EDITOR由打开并等待用户输入的 Git 命令生成(例如“ git rebase -i”)时,编辑器窗口可能会被其他窗口遮挡。 用户可能会盯着原始的 Git 终端窗口,甚至没有意识到他/她需要在 Git 继续之前与另一个窗口交互。对于这个用户,Git 似乎挂起。 如果终端支持擦除最后一行,则在原始终端中打印一条 Git 正在等待编辑器输入的消息,并在编辑器返回时将其删除
launch_editor()
当图形GIT_EDITOR由打开并等待用户输入的 Git 命令生成(例如“ git rebase -i”)时,编辑器窗口可能会被其他窗口遮挡。 用户可能会盯着原始的 Git 终端窗口,甚至没有意识到他/她需要在 Git 继续之前与另一个窗口交互。对于这个用户,Git 似乎挂起。
GIT_EDITOR
git rebase -i
如果终端支持擦除最后一行,则在原始终端中打印一条 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 窗口)
start /WAIT...
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.
git config
实际的解决方案(使用脚本)是意识到: 您在配置文件中引用的实际上是一个 shell (/bin/sh) 脚本,而不是 DOS 脚本。
/bin/sh
那么起作用的是:
C:\prog\git>git config --global core.editor C:/prog/git/npp.bat
与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‘ 选项),并等待该实例关闭后再继续。
git config --global --edit
git rebase -i ...
-multiInst
请注意,我只使用’/’,而不是\‘。我使用选项 2 安装了 msysgit。(将git\bin目录添加到PATH环境变量,但没有覆盖一些内置的 windows 工具)
git\bin
PATH
notepad++ 包装器被称为 .bat 的事实并不重要。 最好将其命名为“npp.sh”并将其放在[git]\cmd目录中(或放在 PATH 环境变量引用的任何目录中)。
[git]\cmd
添加:
对于任何遇到 N++ 只打开一个空白文件并且 git 不接受您的提交消息的问题的人,请参阅“由于空消息而中止提交”:更改您的.bator.sh文件以说:
.bat
.sh
"<path-to-n++" .git/COMMIT_EDITMSG -<arguments>.
这将告诉 notepad++ 打开临时提交文件,而不是一个空白的新文件。