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

终端是哑的,但没有视觉也 编辑器定义。请提供 消息使用-m或-F选项。

所以我发现我需要一个叫做EDITOR的环境变量。没有问题。我把它设置为指向记事本。这几乎奏效了。默认的提交消息在记事本中打开。但是记事本不支持换行。我出去得到了notepad++,但我不知道如何将notepad++设置为%EDITOR%,使其与Git正常工作。

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

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


当前回答

notepad++工作得很好,尽管我选择坚持使用Notepad, -m,有时甚至是内置的“编辑”。

您在使用notepad++时遇到的问题与Git如何启动编辑器可执行文件有关。我对此的解决方案是将环境变量编辑器设置为一个批处理文件,而不是实际的编辑器可执行文件,这样做如下:

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

/WAIT告诉命令行会话停止,直到应用程序退出,这样当Git愉快地等待您时,您就可以按照自己的意愿进行编辑。%*将批处理文件的所有参数传递给notepad++。

C:\src> echo %EDITOR%
C:\tools\runeditor.bat

其他回答

我只是遇到了同样的问题,却找到了不同的解决方案。我正在

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

我有VISUAL=ec,在我的路径上有一个名为ec.bat的批处理文件,其中包含一行:

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

这让我可以用ec <filename>从命令行编辑文件,并且拥有VISUAL set意味着大多数unix程序也会选择它。Git搜索路径的方式似乎与我的其他命令不同——当我在进程监视器中查看Git提交时,我看到它在ec和ec.exe路径上的每个文件夹中查找,但没有ec.bat。我添加了另一个环境变量(GIT_EDITOR=ec.bat),一切正常。

假设你想配置VsCode为你的编辑器。 做以下几点:

在.gitconfig文件中添加以下代码行:

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是必选项,告诉git等待vscode加载。 -n是可选的,它告诉git在新窗口中打开vscode。

如果你想在Windows中配置一个自定义的编辑器路径:

您需要将字code替换为VsCode的“。exe”路径。

例如:

[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

更新:

VsCode现在支持“3路合并”! 更新版本为1.69和1.70.0。 所以现在你可以启用VsCode的“mergetool”来查看3向合并。

为此,你需要更新行:

[mergetool "vscode"]
      cmd = code -w -n $MERGED

与新行:

[mergetool "vscode"]
      cmd = code -w -n --merge $REMOTE $LOCAL $BASE $MERGED

不管怎样,我只是在玩这个,发现下面的工作对我来说很好:

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

我不认为CMD喜欢单引号,所以你必须使用双引号“来指定空格嵌入字符串参数”。

Cygwin(我相信它是Git的Bash的底层平台)另一方面喜欢“和”;你可以指定一个类似cmd的路径,使用/而不是\,只要字符串是引号,即在这个例子中,使用单引号。

-m覆盖/表示使用多个编辑器,不需要在末尾加%*。

这是更严重问题的一个症状。值得注意的是,你有一些设置TERM=dumb。其他不能正常工作的是less命令,它表示您没有一个功能齐全的终端。

这似乎最常见的原因是将TERM设置为全局Windows环境变量中的某个值。对我来说,当我安装草莓Perl时出现了这个问题,关于这个问题的一些信息是关于msysgit bug以及几个解决方案的。

第一个解决方案是在您的~/中修复它。Bashrc补充道:

export TERM=msys

你可以在Git Bash提示符中这样做:

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

另一个解决方案,最终是我所做的,因为我不关心Strawberry Perl在我的环境设置中添加TERM=dumb的原因,是按照msysgit错误报告的注释中的指示删除TERM=dumb。

控制 面板/系统/高级/环境 变量……(或类似,取决于 你的Windows版本)在哪里 设置Sticky环境变量 在Windows上。默认情况下,TERM不是 集。如果TERM设置在这里,那么你 (或者你有一个程序 已安装-例如草莓Perl) 设置它。删除那个设置,还有你 应该没问题。

类似地,如果您使用Strawberry Perl并且关心CPAN客户端或类似的东西,您可以不使用TERM=dumb,而在~/中使用未设置的TERM。Bashrc文件,它将具有类似于设置上面的显式术语的效果。

当然,所有其他解决方案都是正确的,因为你可以使用git config -global core。$MYFAVORITEEDITOR以确保Git在需要为你启动一个编辑器时使用你最喜欢的编辑器。

根据Darren的回答,要使用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。

这对我来说很有魔力。

文章如何将notepad++设置为默认的Git提交编辑器而不是Vim解释了该命令的参数。