当使用 vim “回复” 某些程序(通常是 git)时,考虑一下错误退出,中止打开窗口的整个操作。例如
$ git commit -a
# vim opens, showing me the staged files and asking for a commit message
# oops, I see some stuff staged that wasn't supposed to be committed
:cq # exit vim with nonzero exit code
这将阻止git
实际执行提交。
现在不幸的是,有些机器已经nano
配置为默认编辑器,所以我偶尔会发现自己处于该编辑器中,并且相应地无助。
ssh
我现在所做的是:使用另一个会话登录killall editor
。
有没有办法从 nano 内部做同样的事情,与 vim 相对应:cq
?
答案1
如果已经nano
这是我可以在交互sh
(或bash
等等)中使用作业控制做的事情:
我可以nano
使用Ctrl+ Z( ^Z
) 暂停。注意:如果显示消息,Suspension is not enabled
则我需要按Alt+ Z( M-Z
) 来启用。据我所知,这些是 中的默认键绑定nano
。
如果命令是nano || foo
,则将foo
立即触发。
现在我回到 shell 中,并开始nano
执行作业(参见jobs
)。kill %%
将向其发送信号,但仍然nano
不会退出。我需要fg
在发送信号后才nano
终止。
不如 vim 快:cq
,但仍然不需要额外的 SSH 会话。
预防问题发生
VISUAL
默认情况下,Git 使用你通过 shell 环境变量或之一设置为默认文本编辑器的任何编辑器EDITOR
,否则将返回 vi 编辑器来创建和编辑提交和标记消息。要将该默认编辑器更改为其他编辑器,你可以使用以下设置core.editor
:$ git config --global core.editor emacs
现在,无论您的默认 shell 编辑器设置为什么,Git 都会启动 Emacs 来编辑消息。
(来源)
许多其他程序都尊重VISUAL
或EDITOR
。如果可以,请预先配置它们和/或环境。它可能就像运行一样简单:
export VISUAL=vim
在你的 shell (的启动脚本)中。
答案2
对于 git,退出编辑器并显示空消息将取消提交(除非使用--allow-empty-message
)。保留以 in 开头的行#
即可。
对于已经提供消息的 git 命令(例如commit --amend
或merge
),您需要在保存并退出之前删除该消息。
(但是,是的,如果 nano 具有错误退出功能那就太好了,特别是在后一种情况下。)