我如何设置一个编辑器来在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)的最新版本现在包括:

通过configurationgit 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后,我得出结论,最干净和最简单的方法是:

  1. 添加Vim的主文件夹到您的path(右键单击我的电脑 – >属性 – >高级 – >环境variables)

  2. 运行这个: 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 )。

为了做到这一点,我做了以下工作:

  1. 创build一个包含以下内容的单行batch file(名为git_editor.bat ):
    "C:/Program Files/Vim/vim72/gvim.exe" --nofork "%*"
  2. 在我的PATH放置git_editor.bat
  3. 设置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 -agit 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" 

-nwno-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" 

这将打开一个AtomVSCode窗口供您通过,

崇高

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

好像Git在path中没有空格的情况下找不到编辑器。 所以你将不得不把帕特里克答案中提到的batch file放到非空白path中。

我更喜欢使用emacs。 设置它可能会有点棘手。

  1. 下载emacs并将其解压到c:\emacs之类的地方。
  2. 运行c:\emacs\bin\addpm.exe 。 如果您使用Windows Vista或更高版本,则需要右键单击并以“以pipe理员身份运行”。 这将把可执行文件放到你的path中。
  3. .emacs文件的某个位置添加(server-start) 。 请参阅Emacs Windows常见问题解答 ,了解如何放置.emacs文件的build议。
  4. 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 ,我看到它在ecec.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

  1. 右键单击桌面上的Atom图标,然后单击属性。
  2. 复制了“开始”位置path
  3. 看着那边的Windows资源pipe理器,发现“atom.exe”。
  4. 在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"} 
  1. 如果没有path,不通过path

  2. 如果path为空,则传递空path

  3. 如果path不为空,则转换为Windows格式。

然后我设置这些variables:

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

  2. GIT_EDITOR允许脚本使用Hub命令

资源

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