Emacs shell:保存提交信息

3
我几天前开始使用emacs,但是在使用emacs shell(M-x shell)的时候遇到了一个问题。当我执行'git commit'或者'git commit --amend'命令时,它会打开vim用于编辑并保存提交信息。虽然我可以接受这个操作,但我找不到一种方法来保存并退出vim,因为按下ESC键并不能触发vim的Normal模式,而ESC键是emacs的元键。我尝试将git编辑器更改为emacs,但也不起作用,似乎emacs shell无法运行emacs,并且它没有像我想象中那样打开一个新缓冲区。
emacs: Terminal type "dumb" is not powerful enough to run Emacs.

有没有办法在emacs shell中使用git命令行(我不想使用像magit这样的git前端客户端)?
谢谢, Robin

1
你可以使用 <C-o> 来退出插入模式,以便在单个命令中执行 <C-o>:wq<CR><C-o>:x<CR><C-o>ZZ - romainl
是的,没错。谢谢。 - robin seichais
3个回答

3

您可以使用以下命令将编辑器更改为更简单的编辑器,例如nano:

git config core.editor nano

或者你可以直接在命令行中输入信息,而无需打开任何编辑器:
git commit --amend -m "My message"

看起来我无法使用C-x关闭nano。它会触发emacs命令。顺便说一下,我在OS X上,不知道这是否有关系。 - robin seichais
C-x C-x 应该将实际的 C-x 发送到 nano。 - IFcoltransG

2

以下是@romainl在评论中提供的答案,它可以实现我想要的功能: <C-o> 退出插入模式,:wq:x 然后按 Enter 键。


0

另一种迂回的方法是使用Git使用文件作为提交消息的能力:

  1. 在提交之前,将提交消息(在emacs中)写入临时文件中
  2. 使用命令提交:git commit -F temp_file_name
  3. 删除该文件

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