小编典典

如何设置编辑器以在 Windows 上使用 Git?

all

我正在 Windows 上试用 Git 。我到了尝试“git commit”的地步,但出现了这个错误:

终端是哑的,但没有定义 VISUAL 或 EDITOR。请使用 -m 或 -F 选项提供消息。

所以我发现我需要一个名为 EDITOR
的环境变量。没问题。我将其设置为指向记事本。这几乎奏效了。默认提交消息在记事本中打开。但记事本不支持裸换行。我出去买了Notepad++,但我不知道如何将 Notepad++ 设置为%EDITOR%它可以按预期与 Git
一起使用。

我没有嫁给记事本++。在这一点上,我不介意我使用什么编辑器。我只想能够 在编辑器中输入提交消息, 而不是在命令行(使用-m)。

那些在 Windows 上使用 Git 的人:你用什么工具来编辑你的提交消息,你必须做什么才能让它工作?


阅读 266

收藏
2022-03-06

共1个答案

小编典典

2015 年 9 月更新(6 年后)

git-for-Windows (2.5.3)的最新版本现在包括:

通过配置 git config core.editor notepad
,用户现在可以notepad.exe用作他们的默认编辑器
配置git config format.commitMessageColumns 72将由记事本包装器拾取,并在用户编辑提交消息后对其进行换行。

请参阅Johannes Schindelin (
)提交
69b301b
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

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 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 环境变量引用的任何目录中)。


添加:

对于任何遇到 N++ 只打开一个空白文件并且 git
不接受您的提交消息的问题的人,请参阅“由于空消息而中止提交”:更改您的.bator.sh文件以说:

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

这将告诉 notepad++ 打开临时提交文件,而不是一个空白的新文件。

2022-03-06