How can I set up an editor to work with Git on Windows?
我在Windows上试用Git。 我到了尝试"git commit"的地步,我收到了这个错误:
Terminal is dumb but no VISUAL nor
EDITOR defined. Please supply the
message using either -m or -F option.
所以我想出了我需要一个名为EDITOR的环境变量。 没问题。 我把它设置为指向记事本。 这几乎奏效了。 默认提交消息将在记事本中打开。 但记事本不支持裸线馈送。 我出去拿了Notepad ++,但是我无法弄清楚如何将Notepad ++设置为
我没跟Notepad ++结婚。 在这一点上,我不介意我使用什么编辑器。 我只是希望能够在编辑器而不是命令行(使用
那些在Windows上使用Git的人:你用什么工具来编辑你的提交信息,你需要做些什么来使它工作?
2015年9月更新(6年后)
git-for-Windows的最后一个版本(2.5.3)现在包括:
By configuring
git config core.editor notepad , users can now usenotepad.exe as their default editor.
Configuringgit config format.commitMessageColumns 72 will be picked up by the notepad wrapper and line-wrap the commit message after the user edits it.
请参阅Johannes Schindelin(
并且Git 2.16(2018年第一季度)将显示一条消息,告诉用户在生成编辑器时它正在等待用户完成编辑,以防编辑器
打开一个隐藏的窗口或某个模糊的地方,用户得到
丢失。
请参阅提交abfb04d(2017年12月7日),并提交Lars Schneider(
帮助:Junio C Hamano(
(由Junio C Hamano合并 -
launch_editor() : indicate that Git waits for user inputWhen a graphical
GIT_EDITOR is spawned by a Git command that opens
and waits for user input (e.g."git rebase -i "), then the editor window
might be obscured by other windows.
The user might be left staring at
the original Git terminal window without even realizing that s/he needs
to interact with another window before Git can proceed. To this user Git
appears hanging.Print a message that Git is waiting for editor input in the original
terminal and get rid of it when the editor returns, if the terminal
supports erasing the last line
原始答案
我刚用git版本1.6.2.msysgit.0.186.gf7512和Notepad ++ 5.3.1进行了测试
我更喜欢不必设置EDITOR变量,所以我试过:
1 2 3 4 5 6 7 | git config --global core.editor""c:\Program Files otepad++ otepad++.exe"" # or git config --global core.editor""c:\Program Files otepad++ otepad++.exe" %*" |
总是给出:
1 2 3 4 5 6 7 8 9 | C:\prog\git>git config --global --edit "c:\Program Files otepad++ otepad++.exe" %*: c:\Program Files otepad++ otepad++.exe: command not found error: There was a problem with the editor '"c:\Program Files otepad++ otepad++.exe" %*'. |
如果我定义一个npp.bat包括:
1 2 3 | "c:\Program Files otepad++ otepad++.exe" %* |
我键入:
1 2 | C:\prog\git>git config --global core.editor C:\prog\git pp.bat |
它只适用于DOS会话,但不适用于git shell。
(不是使用core.editor配置机制,其中带有"
Bennett的回答提到了避免添加脚本的可能性,但是在简单的引号之间直接引用程序本身。注意斜线的方向!使用
1 2 | git config --global core.editor \ "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin" |
或者,如果您使用的是64位系统:
1 2 | git config --global core.editor \ "'C:/Program Files (x86)/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin" |
但我更喜欢使用脚本(见下文):这样我可以使用不同的路径或不同的选项,而无需再次注册
实际的解决方案(使用脚本)是要意识到:
你在配置文件中引用的实际上是一个shell(
那么工作是什么:
1 | C:\prog\git>git config --global core.editor C:/prog/git/npp.bat |
使用
1 2 | #!/bin/sh "c:/Program Files/Notepad++/notepad++.exe" -multiInst"$*" |
要么
1 2 | #!/bin/sh "c:/Program Files/Notepad++/notepad++.exe" -multiInst -notabbar -nosession -noPlugin"$*" |
使用该设置,我可以从DOS或Git Shell执行'
Bot命令将触发记事本++的新实例(因此
请注意,我只使用'/',而不是
记事本++包装器被称为.bat的事实并不重要。
最好将它命名为'npp.sh'并将其放在
也可以看看:
- 如何使用visual diff程序查看'git diff'输出?对于一般理论
- 如何使用msysgit / gitk设置DiffMerge?另一个外部工具示例(DiffMerge和WinMerge)
lightfire228在评论中添加:
For anyone having an issue where N++ just opens a blank file, and git doesn't take your commit message, see"Aborting commit due to empty message": change your
.bat or.sh file to say:
1 | "<path-to-n++" .git/COMMIT_EDITMSG -. |
That will tell notepad++ to open the temp commit file, rather than a blank new one.
基于Darren的回答,使用Notepad ++你可以简单地做到这一点(所有在一行):
显然,
对我来说就像一个魅力。
无论如何,我一直在玩这个,发现以下内容对我来说很好用:
1 | git config --global core.editor"'C:/Program Files/TextPad 5/TextPad.exe' -m" |
我不认为CMD喜欢单引号,所以你必须使用双引号"来指定空间嵌入字符串参数"。
另一方面,Cygwin(我认为是Git的Bash的底层平台)喜欢
编辑:更新到vim 7.3后,我得出的结论是,最干净,最简单的方法是:
将Vim的主文件夹添加到路径中(右键单击"我的电脑" - >"属性" - >"高级" - >"环境变量")
运行:
如果你这样做,那么我相信它也适用于cygwin。
原始答案:
即使有几个与vim相关的答案,我也无法在Windows下使用gvim(而不使用批处理文件或%EDITOR%或cygwin)。
我最终得到的是干净整洁,并从这里的一些解决方案中得出:
1 2 | git config --global core.editor \ "'C:/Program Files/Vim/vim72/gvim.exe' --nofork '%*'" |
让我筋疲力尽的一个问题是这些不是Windows风格的反斜杠,它们是正常的正斜杠。
Notepad ++工作得很好,虽然我选择坚持使用记事本,-m,甚至有时内置"编辑"。
您使用Notepad ++遇到的问题与git如何启动编辑器可执行文件有关。我的解决方案是将EDITOR设置为批处理文件,而不是实际的编辑器可执行文件,它执行以下操作:
1 2 3 | start /WAIT"E:\PortableApps otepad++Portable otepad++Portable.exe" %* |
/ WAIT告诉命令行会话暂停,直到应用程序退出,因此您可以编辑到您的内容,而git愉快地等待着您。 %*将批处理文件的所有参数传递到Notepad ++。
1 2 3 | c:\src>echo %EDITOR% c:\tools uneditor.bat |
写字板!
我很高兴使用vim,但是因为我想向公司介绍Git我想要的东西我们都有,并且发现Wordpad似乎工作正常(即Git确实等到你完成编辑和关闭窗户)。
1 | git config core.editor '"C:\Program Files\Windows NT\Accessories\wordpad.exe"' |
那是在msysgit上使用Git Bash;我没有尝试从Windows命令提示符(如果这有任何区别)。
我也在Windows上使用Cygwin,但使用
为了完成这项工作,我做了以下工作:
完成此操作后,
注1:gvim的
注意2:如果路径中有空格,则需要gvim路径周围的引号。
注3:如果git传递带空格的文件路径,则需要"%*"周围的引号。
感谢SO社区...并进行了一些研究,我得到了我最喜欢的编辑器EditPadPro,
使用msysgit 1.7.5.GIT和TortoiseGit v1.7.3.0作为WinXP SP3的核心编辑器......
按照上面的建议,我添加了代码编辑器的bash脚本的路径......
1 | git config --global core.editor c:/msysgit/cmd/epp.sh |
然而,经过几次尝试上述解决方案失败后...我终于能够正常工作了。根据EditPadPro的文档,添加'/ newinstance'标志将允许shell等待编辑器输入....
'/ newinstance'标志是我案例中的关键......
1 2 | #!/bin/sh "C:/Program Files/JGsoft/EditPadPro6/EditPadPro.exe" //newinstance"$*" |
这是更大问题的一个症状。值得注意的是,你有一些设置TERM =哑。其他不能正常工作的是
第一个解决方案是通过添加以下内容将其修复到?/ .bashrc中:
1 | export TERM=msys |
您可以从Git BASH提示符执行此操作,如下所示:
1 | echo"export TERM=msys">> ~/.bashrc |
另一个解决方案最终是我所做的因为我不关心Strawberry Perl将TERM = dumb添加到我的环境设置的原因是按照msysgit错误报告中的评论指示删除TERM = dumb。
Control
Panel/System/Advanced/Environment
Variables... (or similar, depending on
your version of Windows) is where
sticky environment variables are set
on Windows. By default, TERM is not
set. If TERM is set in there, then you
(or one of the programs you have
installed - eg. Strawberry Perl) has
set it. Delete that setting, and you
should be fine.
类似地,如果您使用Strawberry Perl并关心CPAN客户端或类似的东西,您可以单独保留
当然所有其他解决方案都是正确的,您可以使用
在c: Users YourUser文件夹中编辑.gitconfig文件并添加:
1 2 | [core] editor = 'C:\\Program files\\path\\to\\editor.exe' |
对于Atom,你可以做到
1 | git config --global core.editor"atom --wait" |
和类似的VSCode
1 | git config --global core.editor"code --wait" |
这将打开一个Atom或VSCode窗口供您通过,
或者是Sublime
1 | git config --global core.editor"subl -n -w" |
Vim / Gvim对我很有用。
1 2 3 | >echo %EDITOR% c:\Vim\Vim71\vim.exe |
我有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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | #!/bin/sh #open a new instance function doUnix() { "c:\program files otepad++ otepad++.exe" -multiInst -nosession -notabbar $* exit } doUnix $* :WINCALL "c:\program files otepad++ otepad++.exe" -multiInst -nosession -notabbar %* |
2)设置全局core.editor变量
脚本已保存到git / cmd文件夹,因此它已经在gitconsole路径中,这是必需的,因为完整路径可能无法正常工作。
1 | git config --global core.editor"git-editor.bat" |
现在我可以运行git commit -a和git rebase -i master命令。如果您在Git Windows工具中遇到问题,请试一试。
我在多个平台上使用git,我喜欢在所有平台上使用相同的git设置。 (实际上,我使用git在发布控制下拥有所有配置文件,并在每台机器上放置一个git存储库克隆。)我提出的解决方案是:
我把我的编辑设置为giteditor
1 | git config --global core.editor giteditor |
然后我创建了一个名为giteditor的符号链接,它位于我的PATH中。 (我有一个个人bin目录,但PATH中的任何地方都有效。)该链接指向我当前选择的编辑器。在不同的机器和不同的平台上,我使用不同的编辑器,这意味着我不必更改我的通用git配置(.gitconfig),只需更改giteditor指向的链接。
符号链接由我所知道的每个操作系统处理,尽管它们可能使用不同的命令。对于Linux,您使用ln -s。对于Windows,您使用cmd内置mklink。它们有不同的语法(你应该查找它们),但它们的工作原理相同。
基于上面的VonC建议,这对我有用(让我发疯):
1 | git config --global core.editor"'C:/Program Files (x86)/Sublime Text 3/subl.exe' -wait" |
省略
我在Windows上使用Cygwin,所以我使用:
1 | export EDITOR="emacs -nw" |
Emacs键绑定对我来说不适用于Windows shell,因此我只能在Cygwin shell中使用它...(推荐rxvt。)
这是我使用Geany作为git编辑器的设置:
1 | git config --global core.editor C:/path/to/geany.bat |
在geany.bat中包含以下内容:
1 2 | #!/bin/sh "C:\Program Files\Geany\bin\Geany.exe" --new-instance"$*" |
它适用于DOS控制台和msysgit。
我更喜欢使用emacs。设置它可能有点棘手。
Git现在将在现有的emacs进程中打开文件。您必须从
unemacs.exe
我很难让git与wordpad,KomodoEdit以及我给它的其他编辑器合作。最开放的是编辑,但git显然不会等待保存/关闭发生。
作为一个拐杖,我一直在做
1 | git commit -m"Fixed the LoadAll method" |
保持活力。倾向于让我的提交消息比它们应该的更短,但显然在Windows版本的git上还有一些工作要做。
GitGUI也不是那么糟糕。这需要一点点的定位,但在那之后,它运作得相当好。
我需要执行以下两项操作才能让git在windoze中启动notepad ++:
- 将以下内容添加到.gitconfig:
1 | editor = 'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin |
- 修改启动git bash shell的快捷方式以管理员身份运行,然后使用它来启动git bash shell。我猜测上下文菜单条目"Git Bash here"没有启动具有所需权限的npp。
完成上述两项工作后就可以了。
这适用于Powershell和cmder-1.2(与powershell一起使用时)。在?/ .gitconfig中
1 2 | [core] editor = 'c:/program files/sublime text 3/subl.exe' -w |
如何让Sublime Text成为Git的默认编辑器?
我设法通过使用引号和
1 | EDITOR="c:/Program Files (x86)/Notepad++/notepad++.exe" |
ATOM和Windows 10
在git bash中输入:
注意:我为
atom-editor git git-bash windows-10
我刚遇到同样的问题并找到了不同的解决方案。我得到了
1 | error: There was a problem with the editor 'ec' |
我有
1 | c:\emacs\emacs-23.1\bin\emacsclient.exe %* |
这让我可以使用
我正在使用GitHub for Windows,这是一个不错的视觉选项。但我也更喜欢命令行,所以当我在Git shell中打开一个repo时它让它工作我只需设置以下内容:
1 | git config --global core.editor vim |
这很棒。
如果路径中有空格,似乎Git将找不到编辑器。因此,您必须将Patrick的答案中提到的批处理文件放入非空白路径中。
恢复旧线程,但我发现了一个非常简单的解决方案 - 尽管在你必须复制作者给出的"subl"文件的路径中可能存在错误。我正在运行Win 7 x64,我不得不将"subl"文件放在我的
这对我有用:
而已!
注意:Sublime Text 3是我用于此示例的编辑器。
当使用远程安装的homedrive(samba share,nfs,...)时,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | #!/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) otepad++ otepad++.exe', '-multiInst', '-nosession', @ARGV); } if($unamea =~ /testsystem/i){ exec('C:\Program Files otepad++ otepad++.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! "; |
有人可能会考虑使用普通的shell脚本,但我使用的是perl,因为perl随msysgit一起提供,而你的unixoid系统也会提供一个。
将脚本放在
这是Cygwin的解决方案:
1 2 3 4 5 6 7 | #!/bin/dash -e if ["$1" ] then k=$(cygpath -w"$1") elif ["$#" != 0 ] then k= fi Notepad2 ${k+"$k"} |
如果没有路径,则不传递路径
如果path为空,则传递空路径
如果path不为空,请转换为Windows格式。
然后我设置这些变量:
1 2 | export EDITOR=notepad2.sh export GIT_EDITOR='dash /usr/local/bin/notepad2.sh' |
EDITOR允许脚本与Git一起使用
GIT_EDITOR允许脚本使用Hub命令
资源
这对我来说很有用,使用Cygwin和Textpad 6(编辑:只要你对脚本进行明显的改动,也可以使用Textpad 5),并且可能这个模型也可以用于其他编辑器:
?/的.gitconfig:
1 2 | [core] editor = ~/script/textpad.sh |
?/脚本/ textpad.sh
1 2 3 4 5 6 | #!/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):
1 | "`cygpath"c:/program files (x86)/textpad 6/textpad.exe"`" -m"`cygpath -w $1`" |
我只是直接使用TortoiseGit。与我的PuTTY公钥完美集成。有一个完美的提交消息编辑器。