代码之家  ›  专栏  ›  技术社区  ›  Patrick McElhaney

如何设置编辑器在Windows上使用Git?

  •  522
  • Patrick McElhaney  · 技术社区  · 16 年前

    我正在尝试 窗口上的Git . 我已经到了尝试“git commit”的地步,我得到了这个错误:

    终端是哑的,但没有视觉效果,也没有 编辑器已定义。请提供 消息使用-m或-f选项。

    所以我发现我需要一个名为editor的环境变量。没问题。我把它设置为指向记事本。这几乎奏效了。默认提交消息将在记事本中打开。但是记事本不支持裸线提要。我出去了 Notepad++ 但我不知道如何将记事本++设置为 %EDITOR% 以这样一种方式,它与Git一起工作,如预期的那样。

    我没有嫁给记事本++。在这一点上,我不介意使用什么编辑器。我只是想 在编辑器中键入提交消息 而不是命令行 -m )

    在Windows上使用Git的人:您使用什么工具来编辑提交消息,您必须做什么才能使它工作?

    32 回复  |  直到 6 年前
        1
  •  516
  •   Gabriel Staples    6 年前

    2015年9月更新(6年后)

    这个 last release of git-for-Windows (2.5.3) 现在包括:

    通过配置 git config core.editor notepad 用户 can now use notepad.exe as their default editor .
    配置 git config format.commitMessageColumns 72 将由记事本包装器拾取,并在用户编辑提交消息后对其进行行包装。

    commit 69b301b 通过 Johannes Schindelin ( dscho ) .

    Git2.16(2018年第1季度)将显示一条消息,告诉用户在生成编辑器时等待用户完成编辑,以防编辑器 打开一个隐藏窗口或某个模糊的地方,用户将 迷路的。

    commit abfb04d (2017年12月7日),以及 commit a64f213 (2017年11月29日) Lars Schneider ( larsxschneider ) .
    帮助: Junio C Hamano ( gitster ) .
    (合并) Junio C Hamano -- gitster -- 在里面 commit 0c69a13 ,19十二月2017日)

    launch_editor() :表示Git等待用户输入

    当一个图形 GIT_EDITOR 由打开的git命令生成 并等待用户输入(例如 git rebase -i “),然后是编辑器窗口 可能被其他窗户遮住了。
    用户可能会一直盯着 原来的Git终端窗口甚至没有意识到他/她需要 在Git可以继续之前与另一个窗口交互。给这个用户git 显示为挂起。

    打印Git正在等待原始编辑器输入的消息 如果终端 支持删除最后一行


    原始答案

    我刚用git版本1.6.2.msysgit.0.186.gf7512和notepad++5.3.1测试过它

    我更喜欢 必须设置一个编辑器变量,因此我尝试:

    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" %*
    

    我的类型是:

    C:\prog\git>git config --global core.editor C:\prog\git\npp.bat
    

    它只在DOS会话中工作, 但不是从Git外壳 .
    (不是使用core.editor配置机制,而是使用 start /WAIT... “在它中不起作用,但只打开一个新的DOS窗口)


    Bennett's answer 提及避免添加脚本的可能性,但直接引用程序本身 在简单引号之间 . 注意斜线的方向!使用 / 不是 \ 以路径名分隔文件夹!

    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"
    

    但我更喜欢使用脚本(见下文):这样我就可以在不需要重新注册的情况下使用不同的路径或选项 git config .


    实际的解决方案(带脚本)是认识到:
    您在配置文件中引用的实际上是一个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 "$*"
    

    有了这个设置,我可以做到 git config --global --edit '来自DOS或Git Shell,或者我可以做到' git rebase -i ... '来自DOS或Git Shell。
    bot命令将触发notepad++的新实例(因此 -multiInst '选项),并在继续之前等待该实例关闭。

    请注意,我只使用“/”,不使用 \ '.而我 installed msysgit using option 2. (添加 git\bin 目录到 PATH 环境变量,但不覆盖某些内置的Windows工具)

    记事本++包装器被称为.bat这一事实并不重要。
    最好将其命名为“NPP.SH”,并将其放入 [git]\cmd 但是目录(或者在由PATH环境变量引用的任何目录中)。


    参见:


    lightfire228 添加 in the comments :

    对于任何有问题的人,N++只打开一个空白文件,而Git不接受您的提交消息,请参阅“ Aborting commit due to empty message 改变你的 .bat .sh 文件说:

    "<path-to-n++" .git/COMMIT_EDITMSG -<arguments>. 
    

    这将告诉记事本++打开临时提交文件,而不是空白的新文件。

        2
  •  276
  •   Bennett McElwee    6 年前

    建立在 Darren's answer ,要使用记事本+,您只需执行以下操作(全部在一行中):

    git config --global core.editor "'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin"

    显然 C:/Program Files/Notepad++/notepad++.exe 部件应该是系统上记事本+可执行文件的路径。例如,它可能是 C:/Program Files (x86)/Notepad++/notepad++.exe .

    对我来说是一种魅力。

        3
  •  47
  •   Zombo    11 年前

    不管怎样,我只是在玩这个游戏,发现下面的内容对我很有用:

    git config --global core.editor "'C:/Program Files/TextPad 5/TextPad.exe' -m"
    

    我认为cmd不喜欢单引号,所以必须使用双引号“来指定空格中嵌入的字符串参数”。

    另一方面,Cygwin(我认为这是Git的bash的底层平台)喜欢两者 ' " ;可以使用 / 而不是 \ ,只要字符串被引用,即在本例中,使用单引号。

    这个 -m 重写/指示使用多个编辑器,不需要 %* 钉在末端。

        4
  •  25
  •   Nick Knowlson    10 年前

    编辑: 在更新到VIM 7.3之后,我得出结论,做到这一点的最干净和最简单的方法是:

    1. 将VIM的主文件夹添加到您的路径中(右键单击“我的电脑”->属性->高级->环境变量)

    2. 运行此操作: git config --global core.editor "gvim --nofork '%*'"

    如果你这样做,那么我相当肯定它也会与塞格温一起工作。

    原始答案:

    即使有几个与VIM相关的答案,我也很难在Windows下使用gvim(而不是使用批处理文件或%editor%或cygwin)。

    我最终得到的是漂亮和干净的,并从这里的一些解决方案中得出:

    git config --global core.editor \
    "'C:/Program Files/Vim/vim72/gvim.exe' --nofork '%*'"
    

    我花了一段时间才明白的一点是,这些不是windows样式的反斜杠,它们是普通的正斜杠。

        5
  •  16
  •   Patrick Johnmeyer    16 年前

    记事本++工作得很好,尽管我选择使用记事本,-m,甚至有时使用内置的“编辑”。

    使用记事本++遇到的问题与Git如何启动编辑器可执行文件有关。我的解决方案是将编辑器设置为一个批处理文件,而不是实际的编辑器可执行文件,它执行以下操作:

    start /WAIT "E:\PortableApps\Notepad++Portable\Notepad++Portable.exe" %*
    

    /wait告诉命令行会话停止,直到应用程序退出,这样,当git高兴地等待您时,您将能够编辑到您的心脏内容。%*将批处理文件中的所有参数传递到记事本++。

    c:\src>echo %EDITOR%
    c:\tools\runeditor.bat
    
        6
  •  10
  •   Gavin    14 年前

    写字板!

    我很高兴使用Vim,但是因为我想把Git介绍给公司,所以我想要一些我们都有的东西,发现Wordpad似乎可以正常工作(即Git会等到你完成编辑并关闭窗口)。

    git config core.editor '"C:\Program Files\Windows NT\Accessories\wordpad.exe"'
    

    这是在msysgit上使用git-bash;我还没有从windows命令提示符中尝试过(如果这样做有什么区别的话)。

        7
  •  9
  •   Tim Henigan    15 年前

    我也在Windows上使用cygwin,但是 gvim (与基于终端的 vim )

    为了完成这项工作,我做了以下工作:

    1. 创建了一个单行批处理文件(名为 git_editor.bat )其中包含以下内容:
      "C:/Program Files/Vim/vim72/gvim.exe" --nofork "%*"
    2. 放置 蝙蝠侠 在我身上 PATH .
    3. 集合 GIT_EDITOR=git_editor.bat

    这样做了, git commit 等将正确调用gvim可执行文件。

    注1: --nofork gvim选项确保在写入提交消息之前阻止。

    注2:如果路径中有空格,则需要在gvim路径周围加引号。

    注3:仅在Git传递带有空格的文件路径时需要“%*”左右的引号。

        8
  •  8
  •   Edward J Beckett    13 年前

    感谢SO社区…做了一点调查,我找到了我最喜欢的编辑, EditPadPro , 要使用MSysgit 1.7.5.git和TortoiseGit v1.7.3.0在Winxp SP3上作为核心编辑器…

    按照上面的建议,我为代码编辑器添加了bash脚本的路径…

    git config --global core.editor c:/msysgit/cmd/epp.sh
    

    然而,在多次尝试上述解决方案失败后…我终于能把这个工作做好了。根据EditPadpro的文档,添加“/newInstance”标志将允许shell等待编辑器输入….

    /新态度 '在我的案例中,标志是关键…

    #!/bin/sh
    "C:/Program Files/JGsoft/EditPadPro6/EditPadPro.exe" //newinstance "$*"
    
        9
  •  6
  •   Matt McMinn    16 年前

    Vim/Gvim 对我来说效果很好。

    >echo %EDITOR%
    
    c:\Vim\Vim71\vim.exe
    
        10
  •  6
  •   vhu    8 年前

    这是更大问题的1个症状。值得注意的是,您有一个设置项=哑。其他不能正常工作的是 less 命令,表示您没有完全功能的终端。似乎这最常见的原因是将术语设置为全局Windows环境变量中的某个值。对我来说,当我安装草莓Perl时,问题就出现了。关于这个的一些信息在 msysgit bug for this problem 以及一些解决方案。

    第一个解决方案是在~/.bashrc中修复它,方法是添加:

    export TERM=msys
    

    您可以从git bash提示符中这样做:

    echo "export TERM=msys" >> ~/.bashrc
    

    另一个解决方案最终是我所做的,因为我不关心草莓Perl在我的环境设置中添加term=dumb的原因是去删除term=dumb as directed in this comment on the msysgit bug report .

    控制 面板/系统/高级/环境 变量。。。(或类似,取决于 您的Windows版本)是 设置粘性环境变量 在Windows上。默认情况下,术语不是 集合。如果在这里设置了术语,那么您 (或者你的节目之一) 已安装-例如草莓Perl) 设置它。删除该设置,然后 应该是好的。

    同样,如果您使用草莓Perl并关心CPAN客户机或类似的东西,您可以离开 TERM=dumb 单独使用 unset TERM 在您的~/.bashrc文件中,它将具有与上面设置显式术语类似的效果。

    当然,所有其他的解决方案都是正确的,您可以使用 git config --global core.editor $MYFAVORITEEDITOR 要确保Git在需要为您启动编辑器时使用您最喜欢的编辑器。

        11
  •  6
  •   yyunikov    8 年前

    为了 原子 你可以做到

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

    类似的 VSCODE

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

    这将打开一个 原子 VSCODE 窗口让你承诺通过,

    或为了 崇高的

    git config --global core.editor "subl -n -w"
    
        12
  •  5
  •   guwer    8 年前

    在c:\users\youruser文件夹中编辑.gitconfig文件并添加:

    [core]
    editor = 'C:\\Program files\\path\\to\\editor.exe'
    
        13
  •  4
  •   Whome    14 年前

    我的portablegit 1.6运行良好,但在升级到portablegit-1.7之后,Windows版本出现了问题。有些git命令可以打开notepad++.exe,但有些命令不能打开,特别是 GIT重碱 表现不同。

    问题是有些命令运行windows命令进程,有些命令使用unix命令进程。我想给notepad++编辑器提供启动属性,所以需要有一个定制的脚本。我的解决办法是这样。

    1)创建脚本以运行适当的文本编辑器。脚本看起来很奇怪,但同时处理Windows和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)设置global core.editor变量 脚本已保存到git/cmd文件夹,因此它已经在gitconsole路径中,这是必需的,因为完整路径可能无法正常工作。

    git config --global core.editor "git-editor.bat"
    

    现在我可以跑了 Git提交-A Git Rebase-I主 命令。如果在GitWindows工具中有问题,请尝试一下。

        14
  •  4
  •   Bill    11 年前

    我在多个平台上使用Git,我喜欢在所有平台上使用相同的Git设置。(实际上,我的所有配置文件都在Git的版本控制下,并在每台计算机上放置了一个Git存储库克隆。)我想到的解决方案是:

    我设定我的 编辑 GIT编辑器

    git config --global core.editor giteditor
    

    然后我创建一个名为 GIT编辑器 这是我的 路径 . (我有个人 箱子 目录,但在 路径 有效。)该链接指向我当前选择的编辑器。在不同的机器和平台上,我使用不同的编辑器,这意味着我不必更改通用Git配置。( GITCONFIG ,只是链接 GIT编辑器 指向。

    符号链接由我所知道的每个操作系统处理,尽管它们可能使用不同的命令。对于Linux,您使用 LN-S . 对于Windows,使用 CMD 内置的 MKLink . 它们有不同的语法(您应该查找),但它们都是以相同的方式工作的。

        15
  •  4
  •   Community rcollyer    7 年前

    基于 VonC suggestion above ,这对我很有用(让我发疯了):

    git config --global core.editor "'C:/Program Files (x86)/Sublime Text 3/subl.exe' -wait"
    

    省略 -wait 可能会导致问题,尤其是当您使用gerrit并更改必须手动复制到提交消息底部的ID时。

        16
  •  3
  •   CharlesB Craig McQueen    14 年前

    这是我要使用的设置 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中都能工作。

        17
  •  3
  •   kenorb    10 年前

    我很难让Git与Wordpad、Komododedit以及我给的几乎所有其他编辑器合作。大多数都是开放编辑,但Git显然不等待保存/关闭发生。

    作为一个拐杖,我一直在做,即。

    git commit -m "Fixed the LoadAll method"
    

    让事情继续发展。倾向于让提交消息比它们应该的短一点,但是很明显,在Windows版本的Git上还有一些工作要做。

    Gitgui也不错。它需要一点方向性,但在那之后,它工作得相当好。

        18
  •  3
  •   Zenadix    8 年前

    我在Windows上使用cygwin,所以我使用:

    export EDITOR="emacs -nw"
    

    这个 -nw 是为了 no-windows ,即告诉Emacs不要尝试使用x11。

    Emacs的keybindings在Windows shell中不适用,所以我只能在cygwin shell中使用它…(建议使用RXVT。)

        19
  •  2
  •   Community rcollyer    7 年前

    如果路径中有空格,Git似乎找不到编辑器。因此,您必须将中提到的批处理文件 Patrick's answer 进入非空白路径。

        20
  •  2
  •   Michael Steele    14 年前

    我更喜欢使用Emacs。安装起来可能有点棘手。

    1. 下载emacs并将其解包到如下位置 c:\emacs .
    2. c:\emacs\bin\addpm.exe . 如果您使用的是Windows Vista或更高版本,则需要右键单击并“以管理员身份运行”。这将把可执行文件放到您的路径中。
    3. 添加 (server-start) 在你的某个地方 .emacs 文件。见 Emacs Windows FAQ 关于把你的 Emacs 文件。
    4. git config --global core.editor emacsclientw

    现在Git将在现有Emacs进程中打开文件。您必须从手动运行该现有进程 c:\emacs\bin\runemacs.exe .

        21
  •  1
  •   Tom Dunham    15 年前

    我刚刚遇到了同样的问题,找到了不同的解决方案。我得到

    error: There was a problem with the editor 'ec'
    

    我已经得到 VISUAL=ec 和一个名为 ec.bat 在包含一行的路径上:

    c:\emacs\emacs-23.1\bin\emacsclient.exe %*
    

    这允许我从命令行编辑文件 ec <filename> 而拥有可视设置意味着大多数Unixy程序也会接受它。但Git似乎搜索路径与我的其他命令不同-当我看到 git commit 在里面 ProcMon 我看到它在路径上的每个文件夹中查找 ec 为了 ec.exe ,但不是为了 艾克蝙蝠 . 我添加了另一个环境变量( GIT_EDITOR=ec.bat )一切都很好。

        22
  •  1
  •   jpjacobs    12 年前

    我通过使用引号和 / :

    EDITOR="c:/Program Files (x86)/Notepad++/notepad++.exe"
    
        23
  •  1
  •   JaKXz    9 年前

    我正在使用GitHub for Windows,这是一个很好的视觉选项。但我也更喜欢命令行,所以为了使它在Git shell中打开repo时工作,我只设置了以下内容:

    git config --global core.editor vim
    

    效果很好。

        24
  •  1
  •   Community rcollyer    7 年前

    这适用于PowerShell和Cmder-1.2(与PowerShell一起使用时)。在~/.GITCONFIG中

    [core]
        editor = 'c:/program files/sublime text 3/subl.exe' -w
    

    How can I make Sublime Text the default editor for Git?

        25
  •  1
  •   avg    9 年前

    重新整理一条旧线,但我发现了一个漂亮简单的解决方案 here -尽管在路径上可能有错误,您必须复制作者给出的“subl”文件。我正在运行win 7 x64,必须将“subl”文件放入 /Git/cmd/ 使其工作的文件夹。不过,它很有魅力。

        26
  •  1
  •   Jonathan Ramos    8 年前

    Atom和Windows 10

    1. 右键单击桌面上的Atom图标,然后单击属性。
    2. 复制了“起始”位置路径
    3. 用Windows资源管理器查看那里,找到了“atom.exe”。
    4. 在Git Bash中键入:

      git config --global core.editor C:/Users/YOURNAMEUSER/AppData/Local/atom/app-1.7.4/atom.exe"

    注:我全部换了 \ 对于 / . 我在我的主目录中创建了一个.bashrc并使用 / 设置我的主目录,它起作用,所以我假设 / 将是前进的道路。

        27
  •  1
  •   JL_SO    6 年前

    我需要做的事 二者都 要让Git在windoze中启动notepad++,请执行以下操作:

    -将以下内容添加到.gitconfig中:

    editor = 'C:/Program Files/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin
    

    -修改快捷方式以启动git bash shell以管理员身份运行,然后使用它启动git bash shell。我猜想上下文菜单条目“git bash here”没有以所需权限启动NPP。

    在完成上述两个步骤之后,它就工作了。

        28
  •  0
  •   mbx    13 年前

    当使用远程安装的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 ,应添加到 PATH 在里面 .bashrc .profile . 一旦加入 git config --global core.editor giteditor.pl 不管你在哪里,你都有合适的编辑。

        29
  •  0
  •   kghastie    12 年前

    使用cygwin和textpad 6(编辑:也可以使用textpad 5,只要您对脚本做了明显的更改),这对我来说是有效的,而且该模型也可以用于其他编辑器:

    ~/.GITCONFIG:

    [core]
        editor = ~/script/textpad.sh
    

    ~/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"
    

    这一条线路也可以工作:

    ~/script/textpad.sh(选项2):

    "`cygpath "c:/program files (x86)/textpad 6/textpad.exe"`" -m "`cygpath -w $1`"
    
        30
  •  0
  •   Zombo    8 年前

    以下是Cygwin的解决方案:

    #!/bin/dash -e
    if [ "$1" ]
    then k=$(cygpath -w "$1")
    elif [ "$#" != 0 ]
    then k=
    fi
    Notepad2 ${k+"$k"}
    
    1. 如果没有路径,则不通过路径

    2. 如果路径为空,则传递空路径

    3. 如果路径不为空,请转换为Windows格式。

    然后我设置这些变量:

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

    2. Git_编辑器允许脚本使用 Hub commands

    Source