我如何设置一个编辑器来在Windows上使用Git?
我在Windows上试用Git 。 我到了尝试“git commit”的地步,我得到了这个错误:
terminal是愚蠢的,但没有VISUAL和EDITOR定义。 请使用-m或-F选项提供消息。
所以我想通了,我需要有一个名为EDITOR的环境variables。 没问题。 我将它设置为指向记事本。 这工作,差不多。 在记事本中打开默认提交消息。 但记事本不支持裸线提要。 我出去了记事本+ + + ,但我不知道如何获得记事本+ +设置为%EDITOR%的方式,使其与预期的Git一起工作。 
 我没有嫁给Notepad ++。 在这一点上,我不介意使用什么编辑器。 我只想能够在编辑器中input提交消息,而不是在命令行(使用-m )。 
那些在Windows上使用Git的人:你用什么工具来编辑你的提交信息,你需要做些什么才能使它工作?
2015年9月更新(6年后)
git-for-Windows(2.5.3)的最新版本现在包括:
通过configuration
git config core.editor notepad,用户现在可以使用notepad.exe作为他们的默认编辑器 。
configurationgit config format.commitMessageColumns 72将被记事本包装器拾取,并在用户编辑之后对提交消息进行换行。
 参见Johannes Schindelin( dscho )的 commit 69b301b 。 
原始答案
我只是使用git版本1.6.2.msysgit.0.186.gf7512和Notepad ++ 5.3.1来testing它
我宁愿不必设置EDITORvariables,所以我尝试了:
 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" %* 
我input:
 C:\prog\git>git config --global core.editor C:\prog\git\npp.bat 
 它只是从DOS会话, 而不是从gitshell 。 
  (不是用core.editorconfiguration机制,在其中有一个“ start /WAIT... ”的脚本将不起作用,而只是打开一个新的DOS窗口) 
Bennett的回答提到避免添加脚本的可能性,而是直接在简单的引号之间引用程序本身:
 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" 
 但我更喜欢使用一个脚本(见下文):这样我可以玩不同的path或不同的选项,而无需再次注册一个git config 。 
 实际的解决scheme(用脚本)是要认识到: 
  你在configuration文件中引用的是一个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选项),并等待该实例在继续之前被closures。 
 请注意,我只使用'/',而不是\ '。 我使用选项2安装了msysgit。 (将git\bin目录添加到PATH环境variables中,但不覆盖一些内置的Windows工具) 
 记事本++包装器被称为.bat的事实并不重要。 
 最好将其命名为“npp.sh”,并将其放在[git]\cmd目录中(或者在您的PATH环境variables引用的任何目录中)。 
也可以看看:
- 如何用visual diff程序查看“git diff”输出? 为一般理论
- 如何用msysgit / gitk设置DiffMerge? 另一个外部工具的例子(DiffMerge和WinMerge)
lightfire228 在评论中增加:
对于任何有N + +只是打开一个空白文件的问题,而git不接受你的提交信息,请参阅“ 由于空信息而中止提交 ”:改变你的
.bat或.sh文件来说:
 "<path-to-n++" .git/COMMIT_EDITMSG -<arguments>. 
这将告诉记事本++打开临时提交文件,而不是一个空白的新的。
build立在Darren的答案上 ,使用Notepad ++,你可以简单地做到这一点(全部在一行上):
 在32位操作系统上: 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" 
 很明显, C:/Program Files/Notepad++/notepad++.exe部分应该是系统中Notepad ++可执行文件的path。 例如,在Windows 7上,它可能是C:/Program Files (x86)/Notepad++/notepad++.exe 。 感谢评论者指出这一点。 
对我来说就像一个魅力。
无论如何,我刚刚一直在玩这个,发现以下工作对我来说很好:
 git config --global core.editor "'C:/Program Files/TextPad 5/TextPad.exe' -m" 
我不认为CMD喜欢单引号,所以你必须使用双引号“指定空间embedded的string参数”。
 另一方面,Cygwin(我认为它是Git的Bash的底层平台)同样喜欢'和" ;你可以指定一个类似于CMD的path,使用/而不是\ ,只要string被引用,即在这种情况下,使用单引号。 
  -m覆盖/表示使用多个编辑器,并且不需要在最后添加%* 。 
编辑:更新到vim 7.3后,我得出结论,最干净和最简单的方法是:
- 
添加Vim的主文件夹到您的path(右键单击我的电脑 – >属性 – >高级 – >环境variables) 
- 
运行这个: git config --global core.editor "gvim --nofork '%*'"
如果你这样做,那么我相信它也可以和cygwin一起工作。
原始答案:
即使有几个vim相关的答案,我在使用gvim在Windows下(不使用batch file或%EDITOR%或cygwin)时遇到了麻烦。
我最终得出的结论是干净利落的,并从这里的一些解决scheme中得出:
 git config --global core.editor \ "'C:/Program Files/Vim/vim72/gvim.exe' --nofork '%*'" 
有一个让我花了一段时间的是这些不是Windows风格的反斜杠,它们是正常的正斜杠。
记事本++工作得很好,虽然我select使用记事本,-m,甚至有时候是内置的“编辑”。
使用Notepad ++时遇到的问题与git如何启动编辑器可执行文件有关。 我的解决scheme是将EDITOR设置为一个batch file,而不是实际的编辑器可执行文件,执行以下操作:
 start /WAIT "E:\PortableApps\Notepad++Portable\Notepad++Portable.exe" %* 
/ WAIT告诉命令行会话暂停,直到应用程序退出,这样你就可以编辑你的心脏的内容,而git愉快地等待着你。 %*将所有parameter passing给batch file,直到Notepad ++。
 c:\src>echo %EDITOR% c:\tools\runeditor.bat 
写字板!
我很高兴使用vim,但是因为我试图向公司介绍Git,所以我想要一些我们都有的东西,并发现写字板似乎工作正常(即,Git不会等待,直到完成编辑并closures窗户)。
 git config core.editor '"C:\Program Files\Windows NT\Accessories\wordpad.exe"' 
这是在msysgit上使用Git Bash; 我还没有尝试从Windows命令提示符(如果这有什么区别)。
 我也在Windows上使用Cygwin,但使用gvim (而不是基于terminal的vim )。 
为了做到这一点,我做了以下工作:
-  创build一个包含以下内容的单行batch file(名为git_editor.bat):
 "C:/Program Files/Vim/vim72/gvim.exe" --nofork "%*"
-  在我的PATH放置git_editor.bat。
-  设置GIT_EDITOR=git_editor.bat
 完成这个, git commit等会正确地调用gvim可执行文件。 
 注1:gvim的--nofork选项可确保在提交消息被写入之前它会被阻塞。 
注2:如果path中有空格,则需要gvimpath的引号。
注3:为了防止git传递带空格的文件path,需要引用“%*”。
感谢SO社区…和一些研究,我能够让我最喜欢的编辑器EditPadPro作为核心编辑器与msysgit 1.7.5.GIT和TortoiseGit v1.7.3.0通过WinXP SP3 …
遵循上面的build议,我添加了代码编辑器的bash脚本的path…
 git config --global core.editor c:/msysgit/cmd/epp.sh 
然而,经过上述解决scheme的几次失败尝试…我终于能够得到这个工作。 根据EditPadPro的文档,添加“/ newinstance”标志将允许shell等待编辑器input….
' / newinstance '标志是我的关键…
 #!/bin/sh "C:/Program Files/JGsoft/EditPadPro6/EditPadPro.exe" //newinstance "$*" 
Vim / Gvim适合我。
 >echo %EDITOR% c:\Vim\Vim71\vim.exe 
这是更大问题的一个症状。 值得注意的是,你有一些设置TERM =哑的东西。 其他一些不能正常工作的东西就是那些说你没有完整的terminal的命令。 看来这是最常见的TERM设置为您的全局Windows环境variables中的东西造成的。 对我来说,当我安装Strawberry Perl的时候,问题出现了, 关于这个问题的一些信息是关于这个问题的msysgit错误以及几个解决scheme。
第一个解决scheme是通过添加以下内容将其修复到〜/ .bashrc中:
 export TERM=msys 
你可以从Git BASH提示符中这样做:
 echo "export TERM=msys" >> ~/.bashrc 
另一个解决scheme最终是我所做的,因为我不关心草莓Perl的原因,添加TERM =愚蠢的我的环境设置是去并删除TERM =愚蠢作为针对这个评论在msysgit的错误报告 。
控制面板/系统/高级/环境variables…(或类似,取决于您的Windows版本)是在Windows上设置粘性环境variables的地方。 默认情况下,未设置TERM。 如果TERM被设置在那里,那么你(或者你已经安装的程序之一 – 例如Strawberry Perl)已经设置了它。 删除该设置,你应该没问题。
 同样的,如果你使用Strawberry Perl并且关心CPAN客户端或者类似的东西,你可以单独使用TERM=dumb并且在你的〜/ .bashrc文件中使用未unset TERM ,这与设置一个明确的术语类似。 
 当然所有其他的解决scheme是正确的,你可以使用git config --global core.editor $MYFAVORITEEDITOR来确保git使用你最喜欢的编辑器,当它需要为你启动一个。 
我有PortableGit 1.6工作正常,但升级到PortableGit-1.7后Windows发行有问题。 一些git命令可以打开Notepad ++。exe文件,但有些不会,特别是git rebase的行为有所不同。
问题是一些运行windows cmd的命令的进程有些使用了unix cmd进程。 我想给启动属性Notepad ++编辑器,所以需要有一个自定义的脚本。 我的解决办法是这样的
1)创build一个脚本来运行适当的文本编辑器。 脚本看起来很奇怪,但同时处理窗口和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.editorvariables脚本被保存到git / cmd文件夹,所以它已经在一个gitconsolepath,这是强制性的,因为完整path可能无法正常工作。
 git config --global core.editor "git-editor.bat" 
现在我可以运行git commit -a和git rebase -i master命令。 如果您在Git Windows工具中遇到问题,请尝试一下。
我在多个平台上使用git,我喜欢在所有的平台上使用相同的git设置。 (事实上,我已经把所有的configuration文件放在git的释放控制下,并且在每台机器上放了一个git仓库克隆。)我想到的解决scheme是:
我把我的编辑设置为giteditor
 git config --global core.editor giteditor 
然后我创build了一个名为giteditor的符号链接,在我的PATH中 。 (我有一个私人的bin目录,但在PATH作品中的任何地方。)该链接指向我当前select的编辑器。 在不同的机器和不同的平台上,我使用不同的编辑器,所以这意味着我不必更改我的通用gitconfiguration( .gitconfig ),只是giteditor指向的链接。
符号链接由我知道的每个操作系统来处理,尽pipe它们可能使用不同的命令。 对于Linux,您使用ln -s 。 对于Windows,您可以使用cmd内置的mklink 。 他们有不同的语法(你应该查看),但是所有的语法都是一样的。
这是我的设置使用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中使用。
我很难让Git与wordpad,KomodoEdit以及我给它的几乎所有其他编辑器合作。 最开放的编辑,但GIT显然不等待保存/closures发生。
作为一个拐杖,我刚刚做了ie
 git commit -m "Fixed the LoadAll method" 
保持移动。 趋于保持我的提交消息比他们应该是短一点,但显然有一些工作要做的Windows版本的git。
GitGUI也不错。 这需要一点点的方向,但在那之后,它运作得很好。
我在Windows上使用Cygwin,所以我使用:
 export EDITOR="emacs -nw" 
  -nw是no-windows ,即告诉Emacs不要尝试使用X11。 
Emacs的keybindings不适用于我的Windowsshell,所以我只能从Cygwinshell使用这个…(推荐使用rxvt)
根据上面的VonC build议 ,这对我有效(使我疯狂):
 git config --global core.editor "'C:/Program Files (x86)/Sublime Text 3/subl.exe' -wait" 
 省略-wait可能会导致问题,特别是如果您正在使用gerrit和更改ID,必须手动将其复制到提交消息的底部 
对于Atom你可以做
 git config --global core.editor "atom --wait" 
和VSCode类似
 git config --global core.editor "code --wait" 
这将打开一个Atom或VSCode窗口供您通过,
或崇高
 git config --global core.editor "subl -n -w" 
好像Git在path中没有空格的情况下找不到编辑器。 所以你将不得不把帕特里克答案中提到的batch file放到非空白path中。
我更喜欢使用emacs。 设置它可能会有点棘手。
-  下载emacs并将其解压到c:\emacs之类的地方。
-  运行c:\emacs\bin\addpm.exe。 如果您使用Windows Vista或更高版本,则需要右键单击并以“以pipe理员身份运行”。 这将把可执行文件放到你的path中。
-  在.emacs文件的某个位置添加(server-start)。 请参阅Emacs Windows常见问题解答 ,了解如何放置.emacs文件的build议。
-  git config --global core.editor emacsclientw
  Git现在将在现有的emacs进程中打开文件。 您将不得不从c:\emacs\bin\runemacs.exe手动运行现有的进程。 
在c:\ Users \ YourUser文件夹中编辑.gitconfig文件并添加:
 [core] editor = 'C:\\Program files\\path\\to\\editor.exe' 
我刚刚遇到同样的问题,并find了不同的解决scheme。 我正在得到
 error: There was a problem with the editor 'ec' 
 我有VISUAL=ec ec.bat ,并且在我的path上有一个名为ec.bat的batch file,它包含一行: 
 c:\emacs\emacs-23.1\bin\emacsclient.exe %* 
 这使我可以通过命令行编辑文件,并使用可视化设置,这意味着大多数unixy程序也可以读取它们。  Git似乎以不同于我的其他命令的方式searchpath – 当我在ProcMon中查看git commit ,我看到它在ec和ec.exe的path上的每个文件夹中ec.exe ,但不是ec.bat 。 我添加了另一个环境variables( GIT_EDITOR=ec.bat ),一切都很好。 
 我通过设置EDITORvariables使用引号和/来设法使环境版本工作: 
 EDITOR="c:/Program Files (x86)/Notepad++/notepad++.exe" 
我正在使用GitHub for Windows,这是一个不错的视觉选项。 但是我也更喜欢命令行,所以当我在Git shell中打开一个回购库时,我只需要设置以下内容:
 git config --global core.editor vim 
这很好。
这适用于Powershell和cmder-1.2(当与powershell一起使用时)。 在〜/ .gitconfig中
 [core] editor = 'c:/program files/sublime text 3/subl.exe' -w 
我如何使Sublime Text成为Git的默认编辑器?
 复活一个旧线程,但是我发现这里有一个非常简单的解决scheme – 尽pipe在你必须复制作者给出的“subl”文件的path上可能存在错误。 我正在运行Win 7 x64,并且必须将“subl”文件放在我的/Git/cmd/文件夹中才能正常工作。 它虽然工作像一个魅力。 
ATOM和Windows 10
- 右键单击桌面上的Atom图标,然后单击属性。
- 复制了“开始”位置path
- 看着那边的Windows资源pipe理器,发现“atom.exe”。
- 
在git bash中input: git config --global core.editor C:/Users/YOURNAMEUSER/AppData/Local/atom/app-1.7.4/atom.exe"
 注意:我改变了所有\ for / 。 我在我的主目录中创build了一个.bashrc,并使用/来设置我的主目录,它工作,所以我认为/将是要走的路。 
primefaces编辑器 git git-bash windows-10
 当使用远程安装的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 ,该脚本应该添加到.bashrc或.profile PATH中。 一旦添加与git config --global core.editor giteditor.pl你有正确的编辑器,无论你在哪里。 
这对我来说是使用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" 
这一个class轮工程也是如此:
〜/ script / textpad.sh(选项2):
 "`cygpath "c:/program files (x86)/textpad 6/textpad.exe"`" -m "`cygpath -w $1`" 
这是Cygwin的解决scheme:
 #!/bin/dash -e if [ "$1" ] then k=$(cygpath -w "$1") elif [ "$#" != 0 ] then k= fi Notepad2 ${k+"$k"} 
- 
如果没有path,不通过path 
- 
如果path为空,则传递空path 
- 
如果path不为空,则转换为Windows格式。 
然后我设置这些variables:
 export EDITOR=notepad2.sh export GIT_EDITOR='dash /usr/local/bin/notepad2.sh' 
- 
编辑器允许脚本使用Git 
- 
GIT_EDITOR允许脚本使用Hub命令 
资源
我只是使用TortoiseGit直接出箱。 与我的PuTTY公钥集成精美。 有一个完美的编辑提交消息。
- 错误:ANDROID_HOME未设置,“android”命令不在PATH中。 您必须至less满足以下条件之一。
- 自MS14-059以来,System.Web.MVC不会复制到bin文件夹中。 如何防止由于Windows更新而创build缺lessDLL的生成?
- 如何在命令提示符中使用空格?
- 我怎样才能确定一个特定的文件是否在Windows中打开?
- 如何用unicode文件名打开std :: fstream(ofstream或ifstream)?
- 检测当前的Windows版本是32位还是64位
- 在DLL中声明的全局variables会发生什么?
- 以编程方式检测物理处理器/内核的数量,或者如果Windows,Mac和Linux上的超线程处于活动状态
- 为什么Windowsregistry存在?