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

时间:2008-08-14 01:43:04

标签: windows git cygwin editor

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

  

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

所以我发现我需要一个名为EDITOR的环境变量。没问题。我把它设置为指向记事本。这几乎奏效了。默认提交消息将在记事本中打开。但记事本不支持裸线馈送。我出去了Notepad++,但是我无法弄清楚如何将Notepad ++设置为%EDITOR%,以便它能像预期的那样与Git一起使用。

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

您在Windows上使用Git的人:您使用什么工具来编辑提交消息,以及您需要做些什么来使其工作?

35 个答案:

答案 0 :(得分:536)

2015年9月更新(6年后)

last release of git-for-Windows (2.5.3)现在包括:

  

通过配置 git config core.editor notepad ,用户can now use notepad.exe as their default editor   配置git config format.commitMessageColumns 72将由记事本包装器选取,并在用户编辑后对其进行换行。

commit 69b301bJohannes Schindelin (dscho)

Git 2.16(2018年第一季度)将显示一条消息,告诉用户在生成编辑器时它正在等待用户完成编辑,以防编辑器 打开一个隐藏的窗口或某个模糊的地方,用户得到 丢失。

commit abfb04d(2017年12月7日)和commit a64f213(2017年11月29日)Lars Schneider (larsxschneider)。 帮助:Junio C Hamano (gitster)
Junio C Hamano -- gitster --合并于commit 0c69a13,2017年12月19日)

  

launch_editor():表示Git等待用户输入

     

当打开的Git命令生成图形GIT_EDITOR时   并等待用户输入(例如“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's answer提到避免添加脚本的可能性,但直接引用程序本身在简单引号之间。注意斜线的方向!使用/ 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 "$*"

使用该设置,我可以从DOS或Git Shell执行'git config --global --edit',或者我可以从DOS或Git Shell执行'git rebase -i ...'。
Bot命令将触发记事本++的新实例(因此为-multiInst'选项),并等待该实例在继续之前关闭。

请注意,我只使用'/',而不是\'。我installed msysgit using option 2.(将git\bin目录添加到PATH环境变量,但不覆盖一些内置的Windows工具)

记事本++包装器被称为.bat的事实并不重要 最好将它命名为'npp.sh'并将其放在[git]\cmd目录中(或者在PATH环境变量引用的任何目录中)。


另见:


lightfire228添加in the comments

  

对于有问题的人,N ++只打开一个空白文件,而git没有收到您的提交消息,请参阅“Aborting commit due to empty message”:将您的.bat.sh文件更改为说:

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

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

答案 1 :(得分:282)

Darren's answer上构建,要使用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

对我来说就像是一种魅力。

答案 2 :(得分:48)

无论如何,我一直在玩这个,并发现以下内容对我来说很好用:

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

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

另一方面,Cygwin(我认为是Git Bash的底层平台)同样喜欢'";您可以使用/而不是\指定类似CMD的路径,只要引用该字符串,即在此实例中,使用单引号。

-m覆盖/表示使用多个编辑器,最后不需要%*

答案 3 :(得分:25)

编辑:在更新到vim 7.3之后,我得出的结论是,最干净,最简单的方法是:

  1. 将Vim的主文件夹添加到您的路径中(右键单击“我的电脑” - >“属性” - >“高级” - >“环境变量”

  2. 运行此:git config --global core.editor "gvim --nofork '%*'"

  3. 如果你这样做,那么我相信它也适用于cygwin。

    原始回答:

    即使有几个与vim相关的答案,我也无法在Windows下使用gvim(而不使用批处理文件或%EDITOR%或cygwin)。

    我最终得到的是干净整洁,并从这里的一些解决方案中得出:

    git config --global core.editor \
    "'C:/Program Files/Vim/vim72/gvim.exe' --nofork '%*'"
    

    让我筋疲力尽的一个问题是这些不是Windows风格的反斜杠,它们是正常的正斜杠。

答案 4 :(得分:15)

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

答案 5 :(得分:10)

写字板!

我很高兴使用vim,但是因为我想向公司介绍Git我想要的东西我们都有,并发现Wordpad似乎工作正常(即Git确实等到你完成了编辑并关闭窗口。)

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

那是在msysgit上使用Git Bash;我没有尝试从Windows命令提示符(如果这有任何区别)。

答案 6 :(得分:9)

我也在Windows上使用Cygwin,但使用gvim(而不是基于终端的vim)。

为了完成这项工作,我做了以下工作:

  1. 创建了一个单行批处理文件(名为git_editor.bat),其中包含以下内容:
    "C:/Program Files/Vim/vim72/gvim.exe" --nofork "%*"
  2. git_editor.bat
  3. 中放置了PATH
  4. 设置GIT_EDITOR=git_editor.bat
  5. 完成此操作后,git commit等将正确调用gvim可执行文件。

    注1:gvim的--nofork选项确保它在写入提交消息之前就会阻塞。

    注意2:如果路径中有空格,则需要gvim路径周围的引号。

    注3:如果git传递带空格的文件路径,则需要“%*”周围的引号。

答案 7 :(得分:8)

感谢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'标志将允许shell等待编辑器输入....

/ newinstance ”标志是我案例中的关键......

#!/bin/sh
"C:/Program Files/JGsoft/EditPadPro6/EditPadPro.exe" //newinstance "$*"

答案 8 :(得分:6)

这是更大问题的一个症状。值得注意的是,你有一些设置TERM =哑。其他无法正常工作的是less命令,表示您没有功能齐全的终端。看起来这通常是由于将TERM设置为全局Windows环境变量中的某些内容而导致的。对我来说,当我安装Strawberry Perl时,问题出现在msysgit bug for this problem以及几个解决方案上。

第一个解决方案是通过添加:

将其修复到〜/ .bashrc中
export TERM=msys

您可以从Git BASH提示符执行此操作:

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

最终我做的另一个解决方案是因为我不关心Strawberry Perl将TERM = dumb添加到我的环境设置的原因是去除{TERM = dumb为directed in this comment on the msysgit bug report

  

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

同样如果您使用Strawberry Perl并关心CPAN客户端或类似的东西,您可以单独留下TERM=dumb并在〜/ .bashrc文件中使用unset TERM,这将具有类似的效果如上所述设置明确的术语。

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

答案 9 :(得分:6)

在c:\ Users \ YourUser文件夹中编辑.gitconfig文件并添加:

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

答案 10 :(得分:6)

对于 Atom ,您可以

git config --global core.editor "atom --wait"

VSCode

类似
git config --global core.editor "code --wait"

将打开 Atom VSCode 窗口供您提交,

Sublime

git config --global core.editor "subl -n -w"

答案 11 :(得分:5)

Vim/Gvim对我很有用。

>echo %EDITOR%

c:\Vim\Vim71\vim.exe

答案 12 :(得分:4)

我的PortableGit 1.6工作正常,但在升级到PortableGit-1.7后,Windows发布有问题。一些git命令打开Notepad ++ .exe很好,但有些则没有,尤其是 git rebase 表现不同。

问题是某些命令运行windows cmd进程有些使用unix cmd进程。我想将启动属性赋予Notepad ++编辑器,因此需要有一个自定义脚本。我的解决方案就是这个。

1)创建一个脚本以运行适当的文本编辑器。脚本看起来很奇怪,但处理窗口和unix变化。 的 C:/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 master 命令。如果你在Git windows工具中遇到问题,试一试。

答案 13 :(得分:4)

基于VonC suggestion above,这对我有用(让我发疯):

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

省略-wait可能会导致问题,尤其是当您使用gerrit并更改必须手动复制到提交消息底部的ID时

答案 14 :(得分:4)

我在多个平台上使用git,我喜欢在所有平台上使用相同的git设置。 (实际上,我使用git在发布控制下拥有所有配置文件,并在每台机器上放置一个git存储库克隆。)我提出的解决方案是:

我将编辑器设置为 giteditor

git config --global core.editor giteditor

然后我创建了一个名为 giteditor 的符号链接,它位于我的 PATH 中。 (我有一个个人 bin 目录,但 PATH 中的任何位置都有效。)该链接指向我当前选择的编辑器。在不同的机器和不同的平台上,我使用不同的编辑器,这意味着我不必更改我的通用git配置( .gitconfig ),只需更改 giteditor 指向。

符号链接由我所知道的每个操作系统处理,尽管它们可能使用不同的命令。对于Linux,您使用 ln -s 。对于Windows,您使用 cmd 内置 mklink 。它们有不同的语法(你应该查找它们),但它们的工作原理相同,真的。

答案 15 :(得分:3)

这是我使用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。

答案 16 :(得分:3)

我在Windows上使用Cygwin,所以我使用:

export EDITOR="emacs -nw"

-nw适用于no-windows,即告诉Emacs不要尝试使用X11。

Emacs键绑定对我来说不适用于Windows shell,因此我只会在Cygwin shell中使用它...(推荐rxvt。)

答案 17 :(得分:2)

我很难让git与wordpad,KomodoEdit以及我给它的所有其他编辑器合作。最开放的是编辑,但git显然不会等待保存/关闭发生。

作为一个拐杖,我一直在做,即。

git commit -m "Fixed the LoadAll method"

让事情继续前进。倾向于让我的提交消息比它们应该的更短,但显然在Windows版本的git上还有一些工作要做。

GitGUI也不是那么糟糕。这需要一点点的定位,但在那之后,它运作得相当好。

答案 18 :(得分:2)

答案 19 :(得分:2)

我需要执行以下两项操作,才能使git在windoze中启动notepad ++:

-将以下内容添加到.gitconfig:

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

-修改启动git bash shell以管理员身份运行的快捷方式,然后使用该快捷方式启动git bash shell。我猜测上下文菜单项“此处的Git Bash”没有使用所需的权限启动npp。

完成以上两个步骤后,它就可以工作了。

答案 20 :(得分:1)

我遇到了同样的问题并找到了不同的解决方案。我得到了

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似乎以不同于我的其他命令的方式搜索路径 - 当我在ProcMon中查看git commit时,我看到它在ec和{{1}的路径上的每个文件夹中查找},但不适用于ec.exe。我添加了另一个环境变量(ec.bat),一切都很好。

答案 21 :(得分:1)

ATOM和Windows 10

  1. 右键单击桌面上的Atom图标,然后单击属性。
  2. 复制“开始”位置路径
  3. 使用Windows资源管理器查看并找到“atom.exe”。
  4. 在git bash中输入:

    git config --global core.editor C:/Users/YOURNAMEUSER/AppData/Local/atom/app-1.7.4/atom.exe"

  5. 注意:我更改了\的所有/。我在我的主目录创建了一个.bashrc并使用/设置我的主目录并且它工作正常,所以我认为/将是最佳选择。

答案 22 :(得分:1)

这适用于Powershell和cmder-1.2(与powershell一起使用时)。在〜/ .gitconfig

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

How can I make Sublime Text the default editor for Git?

答案 23 :(得分:1)

我正在使用GitHub for Windows,这是一个不错的视觉选项。但我也更喜欢命令行,所以当我在Git shell中打开一个repo时它才能正常工作我只需设置以下内容:

git config --global core.editor vim

效果很好。

答案 24 :(得分:1)

如果路径中有空格,似乎Git将找不到编辑器。因此,您必须将Patrick's answer中提到的批处理文件放入非空白路径。

答案 25 :(得分:1)

我设法通过使用引号和/设置EDITOR变量来获取环境版本:

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

答案 26 :(得分:1)

我使用 GIT_EDITOR 变量和 notepad2 作为编辑器解决了类似的问题。

解决方案 1:将环境变量 GIT_EDITOR 设置为 C:/tools/notepad2.exe。这很好用,但是如果提交消息包含非 ASCII 字符,git 会报错。

解决方案 2:将 GIT_EDITOR 设置为 C:/tools/notepad2.exe //utf8。注意程序开关前面的双斜线。顺便说一句:-utf8 也可以。

答案 27 :(得分:1)

复活一个旧线程,但我发现了一个非常简单的解决方案here - 尽管在你需要复制&#34; subl&#34;的路径上可能存在错误。作者给出的文件。我正在运行Win 7 x64,我不得不把#34; subl&#34;在我的/Git/cmd/文件夹中生成文件以使其正常工作。它的作用就像一个魅力。

答案 28 :(得分:0)

当使用远程安装的homedrive(samba share,nfs,...)时,所有系统都会共享~/.git文件夹,这会导致一些问题。因此,我更喜欢使用脚本来确定正确系统的正确编辑器:

#!/usr/bin/perl
# Detect which system I'm on and choose the right editor
$unamea = `uname -a`;
if($unamea =~ /mingw/i){
    if($unamea =~ /devsystem/i){#Check hostname
        exec('C:\Program Files (x86)\Notepad++\notepad++.exe', '-multiInst', '-nosession', @ARGV);
    }
    if($unamea =~ /testsystem/i){
        exec('C:\Program Files\Notepad++\notepad++.exe', '-multiInst', '-nosession', @ARGV);
    }
}
$MCEDIT=`which mcedit`;
if($MCEDIT =~ /mcedit/){
    exec($MCEDIT, @ARGV);
}
$NANO=`which nano`;
if($NANO =~ /nano/){
    exec($NANO, @ARGV);
}
die "You don't have a suitable editor!\n";

有人可能会考虑使用普通的shell脚本,但我使用perl,因为perl随msysgit一起提供,你的unixoid系统也会提供一个。 将脚本放在/home/username/bin中,该脚本应添加到PATH.bashrc中的.profile。添加git config --global core.editor giteditor.pl后,无论身在何处,都可以使用正确的编辑器。

答案 29 :(得分:0)

以下是Cygwin的解决方案:

#!/bin/dash -e
if [ "$1" ]
then k=$(cygpath -w "$1")
elif [ "$#" != 0 ]
then k=
fi
Notepad2 ${k+"$k"}
  1. 如果没有路径,则不传递路径

  2. 如果路径为空,请传递空路径

  3. 如果路径不为空,请转换为Windows格式。

  4. 然后我设置这些变量:

    export EDITOR=notepad2.sh
    export GIT_EDITOR='dash /usr/local/bin/notepad2.sh'
    
    1. EDITOR允许脚本使用Git

    2. GIT_EDITOR允许脚本使用Hub commands

    3. Source

答案 30 :(得分:0)

您在Windows上使用Git的人:您使用什么工具来编辑提交消息,并且需要做什么才能使其生效?

在Windows 中,我发现这是同时用作 git编辑器通用代码编辑器的最有用的工具,是Sublime Text 3。它的确运行良好,但需要进行一些设置才能使其正确工作,因此我在此处进行了充分的记录:

关于我的主编辑器的注释:对于大型项目,当我需要使用其高级功能(例如多光标模式)时,我将Eclipse作为我的主编辑器,将Sublime Text 3作为我的git编辑器和其他文件编辑器,垂直/列选择模式等。对于中小型项目,我仅使用Sublime Text 3。有关Eclipse的设置说明,请参见my PDF document here

答案 31 :(得分:0)

这对我有用:

  1. 将包含编辑器可执行文件的目录添加到 PATH 变量中。 (例如“C:\ Program Files \ Sublime Text 3 \”
  2. 重新启动计算机。
  3. core.editor 全局git变量更改为编辑器可执行文件的名称,不带扩展名 '。exe'(例如git config --global core.editor sublime_text)
  4. 就是这样!

    注意: Sublime Text 3是我在本例中使用的编辑器。

答案 32 :(得分:0)

添加崇高git config --global core.editor "'C:\Program Files\Sublime Text 3\sublime_text.exe'"

答案 33 :(得分:0)

这对我来说使用Cygwin和Textpad 6(编辑:只要你对脚本进行了明显的改动,也可以使用Textpad 5),并且可能这个模型也可以用于其他编辑器:

〜/的.gitconfig:

[core]
    editor = ~/script/textpad.sh

〜/脚本/ textpad.sh

#!/bin/bash

APP_PATH=`cygpath "c:/program files (x86)/textpad 6/textpad.exe"`
FILE_PATH=`cygpath -w $1`

"$APP_PATH" -m "$FILE_PATH"

这个单行也适用:

〜/ script / textpad.sh(选项2):

"`cygpath "c:/program files (x86)/textpad 6/textpad.exe"`" -m "`cygpath -w $1`"

答案 34 :(得分:-1)

我只是直接使用TortoiseGit。与我的PuTTY公钥完美集成。有一个完美的提交消息编辑器。