在Windows下使用Emacs作为编辑器进行Git提交

5
在Windows中使用git bash,我将core.editor设置为以下内容:
 c:/program/emacs-24.2/bin/emacs --no-splash -geometry 110x58+200+2

在执行git commit命令时,会像预期的那样打开一个新的emacs框架。这个打开的缓冲区的名称为$@。但是我无法保存缓冲区并退出emacs。Git会提示提交信息为空。我的解决方法是将core.editor设置为:
c:/program/emacs-24.2/bin/emacs --no-splash -geometry 110x58+200+2 .git/COMMIT_EDITMSG

这种方法是可行的,但有几个缺点:

  • 我必须在包含.git文件夹的目录中。如果我在子目录中,则无法使用该方法。
  • 打开的emacs窗口中有两个窗口,一个是COMMIT_EDITMSG,另一个是$@

除了让emacs在终端中打开之外,是否有更好的选择将其作为提交编辑器?

4个回答

4

建议您可以选择以下两种方式:

  • 作为守护进程运行Emacs,但该方法只适用于Unix系统。
  • 按照如下步骤启动Emacs serverM-x server-start RET 或将(server-start)添加到.emacs中,然后使用emacsclient代替emacs作为您的core.editor,如果您坚持从命令行运行git(在完成编辑后,在客户端缓冲区中按下C-x # 以将控件传递回git)。

然而,与git一起使用Emacs最好的方式是使用vc

Emacs中,输入C-x v d your/git/repo/root/dir RET获取修改文件列表,使用m标记要提交的文件,然后输入C-x v v进行提交。这时会出现一个包含提交信息的缓冲区(如果有任何ChangeLog条目,则会自动初始化)。编辑完毕后,输入C-c C-c即可完成提交。


@Gauthier:即使您启动常规的emacs(非守护程序),也可以使用emacsclient;但是我记得我在Windows上使用过emacs守护程序;您的emacs可能太旧了吗? - sds
1
对于将emacs作为系统守护进程启动,我对此表示怀疑,正如sds的链接所描述的那样。你只需告诉任何一个emacs成为服务器即可;请参阅emacsclient的手册页,但简单来说,只需在运行中的emacs中运行M-x server-start并保持其运行状态;当你完成编辑任何缓冲区时,按下C-x #关闭弹出的客户端。 - jthill
24.3.1. emacsclient需要--server-file--alternate-editor(或相应的环境变量)。我认为服务器文件是由emacs --daemon创建的,但也许我错了? - Gauthier
@sds:我很乐意帮忙,但我认为你需要先编辑一下,将有关守护进程的部分放在前面。守护进程部分才是答案,有关vc的部分次之。此外,你提供的链接没有关于如何在Windows上运行emacs作为守护进程的信息;jthill提供的信息(server-start,C-x #)是答案的必要部分,并且应该包含在被采纳的答案中。 - Gauthier
我喜欢这里的答案 - sds总是有正确的东西,我只添加了一个细节。 - jthill
显示剩余4条评论

2

我在网上找到的所有方法都不能满足我的需求,而且出奇地没有看到这个命令...所以,下面是我如何在Git for windows中让emacs工作的方法:

git config --global core.editor "'C:\Program Files\Emacs\x86_64\bin\runemacs.exe' -wait"

2

在msysgit 1.7.11下,以下方法适用于我:

git config core.editor '/d/bin/emacs-24.3/bin/emacs.exe'

但是当我切换到这个时:

git config core.editor '/d/bin/emacs-24.3/bin/emacs.exe --no-splash'

我得到了与你一样的'$@'缓冲区。

这不是一个合适的答案。只有当你解决了原帖作者的问题时,才应该发布回复。否则,请在评论区发表意见。 - Srivatsan

1
另一个非常好的与emacs中git相关的接口是通过magit提供的。 magit的思想是在emacs中为您提供交互式界面,以便轻松运行所有经常使用的git命令,从而基本上消除了您直接从命令行运行git的必要性。
虽然它不是标准的(与另一个答案中提到的vc不同),但您可以使用包装系统非常简单地安装它,例如从melpamarmalade存储库安装。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接