我如何设置一个编辑器来在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存在?