如何使Git使用我选择的编辑器进行提交?


2546

我更愿意在Vim中编写我的提交消息,但是它正在Emacs中打开它们。

如何配置Git始终使用Vim?请注意,我要全局执行此操作,而不仅仅是针对单个项目。


200
“如何使git进入vim以从git-go提交提交评论?”
Michael Burr 2010年

Answers:


3484

如果你想设置的编辑对Git的,要么做(你不需要两者):

  • core.editor在您的Git配置中设置:git config --global core.editor "vim"
  • 设置GIT_EDITOR环境变量:export GIT_EDITOR=vim

如果要为Git 和其他程序设置编辑器,请设置标准变量VISUALEDITOR环境变量*:

export VISUAL=vim
export EDITOR="$VISUAL"

*不必同时设置两者,但是某些程序可能不使用更正确的VISUAL。见VISUALEDITOR


对于Sublime Text:将其添加到中.gitconfig。这--wait很重要(它允许在sublime中键入文本,并将等待保存/关闭事件。)

[core]
    editor = 'subl' --wait

可以用可执行文件的完整路径替换“ subl”,但通常在正确安装后才可用。


95
EDITOR环境变量的优点是许多其他程序也将尊重它。
Boojum'4

16
请注意,这git config --global将写入您的个人(每用户)git配置文件。在Unices上是~/.gitconfig。因此,这将为您的所有存储库配置它。
JakubNarębski2010年

42
您可以通过尝试修改最后的提交消息来测试是否成功更改了它。git commit --amend
Marco M.

11
如果您在Windows中执行选项1,并且编辑器的路径中有空格(例如,如果在Program Files下),则请在双引号内插入单引号。例如“'C:/ Program Files(x86)/Whatever/App.exe'”-对某些人显而易见,但对我而言却不是!
Pablissimo

5
@Abramodj -w是没有必要的;-w {scriptout}保存您在编辑时键入的所有字符,以便稍后重播。也许您将其与混淆了-f,这在调用Vim的GUI版本时必须的。也就是说,如果使用mvim,则您指定的编辑器应为mvim -f而不是mvim
罗里·奥肯

617

复制粘贴此:

git config --global core.editor "vim"

如果您想知道自己在做什么。来自man git-commit

环境和配置变量

将从GIT_EDITOR环境变量,core.editor配置变量,VISUAL环境变量或EDITOR环境变量(按此顺序)中选择用于编辑提交日志消息的编辑器。


4
顺便说一句,以上对于CVS和SVN都是正确的,我想还有其他版本控件。
armandino'4

6
@armandino:是的,其他人可能会使用VISUALEDITOR,但他们当然不会使用GIT_EDITORcore.editor
Mark Rushakoff 2010年

8
是的-svnbook.red-bean.com/en/1.1/ch07.html#svn-ch-7-sect-1.3.2因此,从理论上讲,如果我同时使用svn和git,则设置$ VISUAL或$ EDITOR是涵盖这两个默认设置的最佳解决方案!
brazkazoo 2010年

12
为了完整起见,core.editor表示文件中的[core] editor = ...-
JRG

2
没有回答这个问题:“我如何配置混帐......”
Ant6n

192

在Ubuntu和Debian(感谢@MichielB)上,也可以通过运行以下命令来更改默认编辑器:

sudo update-alternatives --config editor

这将提示以下内容:

There are 4 choices for the alternative editor (providing /usr/bin/editor).

  Selection    Path                Priority   Status
------------------------------------------------------------
  0            /bin/nano            40        auto mode
  1            /bin/ed             -100       manual mode
  2            /bin/nano            40        manual mode
* 3            /usr/bin/vim.basic   30        manual mode
  4            /usr/bin/vim.tiny    10        manual mode

Press enter to keep the current choice[*], or type selection number: 

7
在Debian上也可以,谢谢!默认为pico-argh。
MichielB 2013年

2
当然,它可以在Debian上运行;这是Debian的一项功能,就像大多数事情(哦,有争议的!)一样,Ubuntu只是继承了它。Debian的alternatives系统是管理受支持程序类型的默认值的简便得多的方法。供参考:debian-administration.org/article/91/...
underscore_d

它的工作原理,而GIT_EDITOREDITOR 不能正常工作--ubuntu
忍者

Emacs没有选项?如果为真,真可惜!
haziz

2
@haziz update-alternatives将显示所有已安装的编辑器。Koen尚未安装Emacs。
主要

59

在Windows 7中,虽然添加了“ Sublime”编辑器,但仍然给我一个错误:

由于提交消息为空而中止提交。

Sublime无法保持焦点。

为了解决这个问题,我在c:/ users / username /文件夹中打开了.gitconfig文件,并在双引号之外添加了带有--wait选项的以下行。

[core]
      editor = 'F:/Program Files/Sublime Text 2/sublime_text.exe' --wait

希望它对与Sublime面临类似问题的人有所帮助。


真好!谢谢安莫尔,我遇到了一个问题,它在一条空消息上提交。
ddavison

您为什么要对git commit使用sublime?
亚当F

13
任何git commit的编辑器都将主要用于添加多行注释,而出于许多开发人员的各种原因,Sublime是程序员的选择。人们通常倾向于使用一种编辑器来进行大多数编码和其他工作。Sublime只是个人选择,可以是任何编辑器。
2014年

4
刚刚发现单引号'是必需的。它没有用双引号”工作。
dotnetCarpenter

1
无需手动编辑gitconfig,您可以使用此命令git config --global core.editor "'C:/Program Files/Sublime Text 3/subl.exe' --wait"
KayakinKoder

53

在Windows 7中,将编辑器设置为Notepad ++

  • 打开任何文本编辑器。
  • 打开这个文件: C:\Users\YOUR_USERNAME\.gitconfig
  • 将此部分添加到底部:

[core]
    editor = 'C:/Program Files (x86)/Notepad++/notepad++.exe' 
  • 保存并关闭文件。
  • 使用git提交时,只需编写git commit并按即可Enter。它将弹出打开记事本++。
  • 将提交消息写在文件顶部,然后保存并关闭文件。做完了!

终于有人知道怎么写简单!谢谢。但您应该提到,在记事本的路径中必须使用'/'或双反斜线'\\',否则git会抱怨...
icl7126 2013年

10
您可能需要至少将其-multiInst作为参数添加到notepad ++中,并且可能需要添加-notabbar。如果git似乎不知道何时完成文件编辑,则执行此操作,要么永远等待,要么根本不等待。
ErikE 2013年

1
正是我想要的。对比使用\和/
亨利

4
要在命令行上设置配置,我需要在单引号内加上双引号,例如>git config --global core.editor '"C:/Program Files (x86)/Notepad++/notepad++.exe"'
Josef'Aug

2
要添加Notepadd ++ PARAMS,我不得不这样做:editor = 'C:/Program Files (x86)/Notepad++/notepad++.exe' -multiInst -notabbar-也就是说,划定单引号外面PARAMS
cropredy


24

而且,如果您正在与使用命令行的设计师合作,那么Pico会不知道捷径;)

git config --global core.editor "pico"

要么

export VISUAL=pico
export EDITOR=pico

18

Atom作为您的git编辑器

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

需要将Atom配置为从命令行运行才能使上述工作正常进行:

OS X:从Atom安装Shell命令:菜单栏> Atom>安装Shell命令

Windows:无需任何操作-默认情况下,atom配置为从命令行运行


17

在Mac OSX 10中将Sublime Text 2设置为Git提交编辑器

运行以下命令:

$ git config --global core.editor "/Applications/Sublime\ Text\ 2.app/Contents/SharedSupport/bin/subl"

要不就:

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

不知何故,它没有将文本传递到git。我收到“由于提交消息为空而正在中止提交”。错误。
Mahendran

我已经使用第一个命令来设置SL。cmd + S,然后cmd + W关闭编辑器
Mahendran,2015年

2
Visual Studio Code也支持该-w参数。例如。$ git config --global core.editor "code -w"。整洁的东西
Automatico

此处的替代答案是:stackoverflow.com/a/48212377/4561887,带有Linux示例。
加布里埃尔·斯台普斯

13

Windows:将记事本设置为默认的提交消息编辑器

git config --global core.editor notepad.exe

点击Ctrl+ S保存您的提交消息。要丢弃,只需关闭记事本窗口而不保存即可。

如果您点击保存的快捷方式,然后决定中止,请转到“文件”->“另存为”,然后在打开的对话框中将“另存为类型”更改为“所有文件(*。*)”。您将看到一个名为“ COMMIT_EDITMSG”的文件。删除它,然后关闭记事本窗口。

编辑:或者,更容易地,从打开的记事本窗口中删除所有内容,然后单击保存。(感谢mwfearnley的评论!)

我认为,对于诸如提交消息之类的小写文章,记事本效果最好,因为它很简单,带有Windows,可立即打开。当您有大量的插件和东西时,甚至连您的崇高精神都可能需要一两秒钟才能被激发。


2
您可以将文件清空(或注释掉所有非空白行),而不是转到File-> Save as,然后Git将由于空的提交消息而中止。
mwfearnley

@Stepan您要修改提交吗?如果是这样,那么我猜想它与\r\n(Windows中的换行符)和\n(Linux中的换行符,也是Git的默认设置)有关。
Sнаđошƒаӽ

最好您添加这样的行,core.editor = 'notepad' .git/COMMIT_EDITMSG --wait以便它打开并保存默认的编辑消息,并且您不需要“另存为”
Radon8472 '18

12

这为遇到此问题的人们提供了一个答案,他们可能希望链接vim以外的编辑器。

Github所链接的资源很可能会在更新编辑器时保持最新状态,即使SO的答案(包括该答案)没有。

将文本编辑器与git关联

Github的帖子准确地显示了在各种编辑器中键入您的命令行的内容,包括特定于每个编辑器的选项/标志,以使其最适合与git一起使用。

记事本++:
git config --global core.editor "'C:/Program Files (x86)/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"

崇高文字:
git config --global core.editor "'c:/Program Files/sublime text 3/subl.exe' -w"

原子:
git config --global core.editor "atom --wait"

上面的命令假定您的编辑器已安装在Windows计算机的默认目录中。

这些命令基本上将双引号之间的文本添加到.gitconfig主目录中。
在Windows机器上,home可能是C:\Users\your-user-name,其中your-user-name是您的登录名。
在命令行中,输入可以访问此目录cd ~

例如,上面的命令将在以下[core]部分的下面添加以下行:
[core] editor = 'C:/Program Files/sublime text 3/subl.exe' -w

如果您使用的是其他编辑器,请使用上述两种方法替换为编辑器的路径。(并希望不需要标记来实现最佳用法。)


谢谢,我为“ vim”启动了Git的“内部” vim实例而苦苦挣扎(没有我的喜好等)。提供我实例的完整路径解决了这个问题!
benichka '19

10

对于emacs用户

.emacs

(server-start)

shellrc

export EDITOR=emacsclient

6
这是在commiting时将emacs设置为终端模式的方法git config --global core.editor "emacs -nw"
kukinsula 2016年

我使用git config --global core.editor "emacs -nw -q",其中-q跳过初始化文件。
miguelmorin

8

Sublime Text 3作为Git编辑器的最佳设置(Windows和Linux说明):

要在Windows中遵循这些说明,请确保已安装Windows版Git。在Windows中,我喜欢使用Git Bash,使它看起来更像Linux。

首先,我们要创建一个特殊的Sublime Text项目,以便我们可以指定要在Git调用编辑器时设置的特殊项目设置,以使在Git中进行编辑时的事情变得更加容易。例如,在大多数项目中,我通常将标尺设置为120个字符,但是对于Git提交消息,我希望该标尺为72个字符,以便当您调用git log或时,它可以很好地适合终端git lg


1.使用我们要用于编辑Git提交消息的设置创建Sublime Text项目

打开Sublime Text,然后转到菜单“文件”“新窗口”以创建一个新的匿名项目。转到菜单“项目”“将项目另存为...”,然后选择一个保存位置。在Linux中,我使用文件名将其保存在Linux主目录中.gitconfig.sublime-project。因此,其路径为:~/.gitconfig.sublime-project在Windows中,还可以将其保存在主目录中,例如:C:\Users\MY_USER_NAME\.gitconfig.sublime-project 现在转到菜单“项目”“编辑项目”以编辑项目设置。粘贴以下内容并保存设置。如果需要,请对项目设置进行进一步的编辑。

{
    // For folder settings help see here: https://www.sublimetext.com/docs/3/projects.html

    "folders":
    [

    ],

    "settings":
    {

        // Disables horizontal scrolling if enabled.
        // May be set to true, false, or "auto", where it will be disabled for
        // source code, and otherwise enabled.
        "word_wrap": false,

        // Set to a value other than 0 to force wrapping at that column rather than the
        // window width
        "wrap_width": 0,

        // Columns in which to display vertical rulers
        "rulers": [72, 50], //72 is recommended by git for commit message content, and 50 for commit titles

        // The number of spaces a tab is considered equal to
        "tab_size": 4,

        // Set to true to insert spaces when tab is pressed
        "translate_tabs_to_spaces": true,
    },

    "build_systems":
    [

    ]

}

2.设置Git使用的编辑器

现在,我们需要通过编辑.gitconfig文件来设置Git使用的编辑器。

对于Linux:

您的用户副本位于~/.gitconfig。打开此文件并添加以下行。确保使用上面刚刚创建的Git项目的正确路径名!我正在使用~/.gitconfig.sublime-project

[core]
    editor = subl --project ~/.gitconfig.sublime-project --wait

--wait很重要,因为它会迫使Git等待文件关闭,然后再继续。该--project行对于告诉Sublime Text每当Git打开Sublime Text时要打开哪个项目很重要。

根据上述@digitaldreamer的回答(https://stackoverflow.com/a/2596835/4561887),“ subl可以用可执行文件的完整路径替换,但是,subl如果正确安装了[Sublime],[ 别名]通常可用。”

对于Windows:

对于Windows,请先阅读Linux指导以获取背景信息。现在,我们将执行几乎相同的操作。

(可选:创建subl在Git Bash中使用的别名):

打开一个文本编辑器(例如,记事本,Notepad ++,Sublime Text,Geany等),然后在主目录中创建一个名为“ .bash_profile”的文件。因此,其路径为:C:\Users\MY_USER_NAME\.bash_profile。将以下内容保存到其中:

alias subl="/c/Program\ Files/Sublime\ Text\ 3/subl.exe"

这将创建一个名为Git Bash的别名subl,我们现在可以在Windows的Git Bash中使用它来轻松打开Sublime Text。这不是必需的步骤,但是对于一般的Git Bash使用非常有用。现在,您可以subl .在Git Bash中调用,以在当前目录中打开一个新的Sublime Text项目。

(强制性):

编辑添加到.gitconfig您的主目录中的文件:C:\Users\MY_USER_NAME\.gitconfig。请注意上述Linux指令中的细微变化:

[core]
  editor = 'C:/Program Files/Sublime Text 3/subl.exe' --project ~/.gitconfig.sublime-project --wait
  • 注意,您必须指定Sublime Text可执行文件的完整路径。注意斜线的方向!使用/NOT \分隔路径名称中的文件夹!(感谢VonC 帮助我看到了这一点)。
  • 我们subl上面为Git Bash设置的别名在这里不起作用,因此您不能像在Linux示例中那样使用它,而必须如上所述指定整个路径。
  • ~但是,该符号在这里仍然可以正常工作以进入Windows主目录。

2.5。(可选)将“ Git”软件包安装到Sublime Text 3中。

这使您可以突出显示git commit消息的语法,并可以访问其他Git命令,例如git blame(在Sublime Text中经常使用)或git commit(在Sublime Text中不使用,因为我更喜欢通用Git的命令行)流量,正如我在此答案下方的评论中提到的那样。

要安装软件包:首先,确保已安装“软件包控制”。接下来,按Ctrl+ Shift+ P(与“工具”→“命令面板”相同)并键入“ Package Control:Install Package”的全部或部分,然后按Enter。在出现的搜索框中,搜索“ Git”软件包并Enter单击它,或单击它以自动安装它。

安装后,Ctrl++ Shift+ P然后搜索“ git”将显示Git命令,您现在可以在Sublime Text内部内部使用它,例如git blame


3.使用

现在git commit,例如,当您从命令行正常调用时,Sublime Text将打开.gitconfig.sublime-project上面创建的带有该项目设置的文本!键入段落时,您会注意到,由于关闭了自动换行功能,因此该段落超出了我们设置的标尺。要在每行末尾通过自动插入的硬返回来强制进行自动换行,请将光标放在要自动换行的长行上,然后按Alt+ Q现在它将以72个字符进行硬包装/硬折叠,这是我们在上面的项目设置的“ rulers”参数中设置的。

现在,保存您与提交信息Ctrl+ S,并退出(以完成git commit用)Ctrl+ Shift+ W

做完了!

有关:

  1. Git mergetool与Windows上的Meld
  2. https://github.com/ElectricRCAircraftGuy/eRCaGuy_dotfiles

1
看起来很详细。+1
VonC

在Sublime Text 3中,现在有一种Git Commit语法类型。您现在可以跳过自定义的“崇高文本项目”步骤。
yegeniy

我不同意:那只是语法高亮。我的自定义项目不会碰到语法高亮:它会设置标尺并为您打开git提交提供上下文,这样它们就不会在您打开或最后打开的任何项目中打开。两者无关。都做。
加布里埃尔·斯台普斯

我只是添加了步骤2.5,但是(这里有点“ but”):我并不总是使用Sublime Text 3作为编辑器(有时我使用Eclipse,因为它比Sublime具有更好的符号跟踪和索引功能,即使它不是一个笨拙的编辑器与Sublime相比),我确实更喜欢从命令行使用Git,因此,即使您按照我刚才在步骤2.5中所述将“ Git”软件包安装到Sublime中,我也绝对不建议跳过步骤1。是的,您可以直接从Sublime进行Git Commit,但是我更喜欢命令行。
加布里埃尔·斯台普斯

提示:如果sublimegit和同时使用trim_trailing_white_space_on_save,则要添加别名以添加补丁,因为删除尾随空白会中断补丁编辑,而补丁编辑的意义非常重大。这可以通过以下方式实现:git config --global alias.patch "-c core.editor=vim add --patch"
Timo


2

对于想要将neovim与Linux的Windows子系统一起使用的Windows用户:

git config core.editor "C:/Windows/system32/bash.exe --login -c 'nvim .git/COMMIT_EDITMSG'"

不是一个万无一失的解决方案,因为它不处理交互式变基(例如)。改进非常欢迎!


1

试一试EDITOR=vim git commit

或者,您可以export EDITOR=vim在bashrc 中将EDITOR设置为vim by 。


1

对于Mac App Store中的TextWrangler用户:

git config --global core.editor "open -n -W -a TextWrangler"

另外,请确保将“ TextWrangler>首选项>应用程序>当TextWrangler变为活动状态时:”设置设置为“不执行任何操作”

这对我适用于Mac App Store中带有TextWrangler 5.0.2的OS X 10.11.4。

说明:

-n手段在新实例中打开。

所述-W装置等待,直到应用程序退出使用编辑的文件的内容作为提交消息之前。

-a的TextWrangler意味着使用应用程序的TextWrangler打开文件。

有关man open更多详细信息,请参见Mac Terminal应用程序中的。


如果TextWrangler已经打开,您的解决方案将打开另一个实例,该实例具有与第一个实例相同的文件集。这似乎很危险。
克拉斯

我没有安装的TextWrangler命令行工具(barebones.com/support/textwrangler/cmd-line-tools.html),然后使用git config --global core.editor "edit -w"。这将在当前实例中打开提交消息,并且只要您仅关闭此提交消息文档,提交就会继续。
克拉斯



1

只是因为我来这里是为了寻找一条解决方案(对于我而言,我通常使用vim此方法,但这次我想使用VS Code)仅针对一条命令,而其他人可能也想知道:

GIT_EDITOR='code -w' git rebase -i 

这是我的git/ hub版本,仅用于上下文:

git version 2.24.2 (Apple Git-127)
hub version 2.14.1

1

要将vim设为ubuntu 20:04上git的默认编辑器,请运行以下命令:

git config --global core.editor vim

0

对于IntelliJ用户

当我尝试git rebase时,出现以下错误:'提示:等待您的编辑器关闭文件...代码-n -w:代码:找不到命令错误:编辑器代码有问题-n -w'。

当我尝试将IntelliJ与Git关联时,出现了相同的错误: 在此处输入图片说明

问题是我的环境PATH变量中没有添加命令代码。而且我不想从终端使用Visual Studio Code。所以这就是为什么提示“找不到命令”的原因。我通过删除解决了这个问题

编辑器=代码-n -w

从我的.gitconfig文件的核心部分。Git再次正常工作。


-1

对于Textmate用户

当您要编辑提交时,将在其中打开Textmate编辑器。需要安装textmate命令行工具。

git config --global core.editor "mate -w"


@givanse是什么意思?
2014年

2
我想他的意思是类似于vim的回答,这是微不足道的吗?
Rup 2014年

嗯,不是,但是如果您使用的不是vim,例如textmate。
2014年

textmate也有一个“ wait”选项,所以对我来说是这样的: git config --global core.editor "/usr/local/bin/mate -w"
2015年

-1

对于要使用Kinesics Text Editor的Windows用户

创建一个名为“ k.sh”的文件,添加以下文本并将其放在您的主目录(〜)中:

winpty "C:\Program Files (x86)\Kinesics Text Editor\x64\k.exe" $1

在git提示符下输入:

git config --global core.editor ~/k.sh
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.