在终端中使用Git commit 命令会打开VIM编辑器,但无法返回终端。

233

我现在正在学习GitHub,正在Nettuts上做这个Git essentials tutorial。 我正在学习关于提交的课程。

老师输入git commit,它会在他的编辑器中打开VIM(我也想知道如何使它在Sublime Text 2中打开),无论如何它都会在VIM中打开,然后我添加了一行文字,说这是我的第一个提交,然后保存。

接下来,它会提示我将输出保存到桌面,但这在他的屏幕截图中没有看到。 现在我仍然在VIM中,不确定如何返回“正常”终端 :(

我无法弄清楚,所以我只好退出终端并重新启动它,再次进行git commit,并收到一些有关重复的警告消息! 不确定是否需要(E)edit(A)abort

git status

enter image description here

vim

enter image description here

当我重新打开终端并再次执行git commit时,出现以下信息:

enter image description here


3
如果你只是想知道如何保存并退出vim,那么命令是:_:wq_。 - guido
3
我也遇到了同样的问题……一旦我尝试提交,终端就会打开某种我无法退出的编辑器。非常烦人! - Kokodoko
3
@Kokodoko 嗯,我现在只需使用 git commit -m '我的信息' 提交就可以了 :) 不需要编辑器,从未需要使用过,只需要一行简短的消息即可。 - Leon Gaban
1
@LeonGaban 对于第一次提交,简短的提交消息是可以的,但之后你应该尝试采用一个简短的主题,然后详细说明在该提交中实际发生了什么的技术。 - liamvictor
1
@LeonGaban 你真是太棒了 - baydi
显示剩余2条评论
6个回答

415

按下 Esc 键,然后按下 :wq 键 (w表示写入文件并退出,q表示退出),以保存您的工作并退出。

或者,您可以按下 Esc 键,然后按下 :x 键,以同时保存并退出。

要设置其他编辑器,请在终端中运行 export EDITOR=myFavoriteEditor 命令,其中 myFavoriteEditor 可以是 vi, gedit, subl (用于 sublime) 等。


8
在解释命令序列时,加上+1,并在必要时展示如何切换编辑器(但是,说真的,为什么有人会想使用除vim之外的编辑器呢:))。 - Lieven Keersmaekers
15
жіЁпјҡдҪҝз”Ёз®ҖеҚ•зҡ„:xе‘Ҫд»Өдҝқеӯҳ并йҖҖеҮәvimжҜ”:wqе‘Ҫд»Өжӣҙеҝ«дёҖдәӣ ;)пјҲзҝ»иҜ‘з»“жһңпјүдҪҝз”Ёз®ҖеҚ•зҡ„:xе‘Ҫд»Өдҝқеӯҳ并йҖҖеҮәvimжҜ”:wqе‘Ҫд»Өжӣҙеҝ«дёҖдәӣ ;) - Xavier
2
要永久设置编辑器,您可以使用以下命令:git config --global core.editor myFavoriteEditor - Machta
3
我的ESC键无法使用。这是什么神秘的命令?现在是2016年还是1996年?难以置信… - oyalhi
3
完全没用。是的,我输入了一条提交信息。Vim太糟糕了。 - Dave Kielpinski
显示剩余3条评论

44

虽然这并不是解决VIM问题的答案,但您可以使用命令行来输入提交消息:

git commit -m "This is the first commit"

24

您需要返回到普通模式,并使用以下方式保存提交信息:

<Esc>:wq


<Esc>:x

或者
<Esc>ZZ

Esc键可将您从插入模式返回到正常模式:wq:xZZ序列可保存更改并退出编辑器。


4
不,Esc键没有任何作用。我被卡在“合并分支master的…”界面。请编写提交信息以解释为什么需要此合并。 - Kokodoko
你输入了提交信息吗?当你按下 <Esc>:wq 时会发生什么? - Lieven Keersmaekers
4
在我的情况下没有任何事情发生。这些神秘的指令是什么,这是2016年还是1996年? - oyalhi
1
@Homo-Erectus - 我开始使用vim已经有4年了,我唯一的遗憾是没有早点开始。我不认为这是浪费时间,你应该试试它。不过要注意,它确实有一个陡峭的学习曲线,但是它值得一试。至于命令,我没有太多要补充的。输入<esc>,输入:,输入x,就可以了。 - Lieven Keersmaekers
1
@oyalhi 开始使用vim从来不会太晚。 - Anatoly Yakimchuk

17

这是对你问题的回答...

我也想知道如何使其在Sublime Text 2中打开

对于Windows:

git config --global core.editor "'C:/Program Files/Sublime Text 2/sublime_text.exe'"

请检查sublime_text.exe路径是否正确,如有需要请进行调整。

对于Mac/Linux:

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

如果你收到像这样的错误信息:

error: There was a problem with the editor 'subl -n -w'.

subl创建别名。

sudo ln -s /Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl /usr/local/bin/subl

再次检查路径是否与您的计算机匹配。

对于Sublime Text,只需保存cmd S并关闭窗口cmd W即可返回git。


那是一个符号链接,不是别名。别名是在命令上下文中由你的Shell替换的字符串,尽管通常应该优先考虑使用Shell函数而不是别名。 - tripleee

17

只需执行vim的“保存并退出”命令 :wq 即可完成操作。

如果想让Git在另一个编辑器中打开文件,需要将Git的 core.editor 设置更改为运行所需编辑器的命令。

git config --global core.editor "启动sublime text 2的命令"


5
感谢您提供 sublime text 编辑器设置的提示。然而,我遇到了一个问题,我必须设置 --wait 标志:git config --global core.editor "subl --wait"。这可以防止出现“由于空提交消息而中止提交”的情况。 - Eric

1

像所有乖巧的终端应用程序一样,调用编辑器的git尊重EDITORVISUAL环境变量的值。如果这两个变量都没有设置,它通常会回退到类似vi的编辑器(尽管在某些平台上可能会使用nano或更糟糕的编辑器)。

有很多现有的答案告诉你如何退出vim,甚至在vim中进行编辑(如果你真的想要的话)。

在类Unix平台上,你可以为单个命令设置EDITOR

EDITOR=emacsclient git commit

或者你可以在剩余的shell会话中定义它。
export EDITOR=emacsclient

将以下内容添加到您的.profile文件或类似文件中,以便在登录时为所有会话设置它。
(对于特定的emacsclient,您希望在当前运行的Emacs实例中运行M-x server-start命令。)
如果您不想使用编辑器,只需将提交消息作为参数传递给-m选项即可。大多数Unix shell都允许您传递多行字符串。通常,您希望第一行总结整个提交(例如,通过git log --oneline显示),并且按照约定,在此之后应该有一个空行来将其与其他部分分隔开来。
git commit -m 'Small fixes

Refactored all 1,365 source files by hand'

许多命令行界面将在您处于多行引用字符串内时显示一个PS2提示符,通常为">"。
[master] (venv) your usual shell prompt$ git commit -m 'Small changes (return)
> (return)
> More text' (return)

缺乏这样简单明显的便利设施是避免使用Windows的众多原因之一。

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