因此,在普通的 Mac OSX Yosemite 上,如果我运行vi /tmp/foo
然后输入一些文本,最后执行:Wq
(我常犯的一个拼写错误),然后:wq
.一切看起来都很好,但由于某种原因退出代码将为 1。如果我重复同样的事情,但不这样做,:Wq
那么它会返回 0。
这对于 git commit 来说是令人抓狂的,我将在其中输入提交消息,犯这个错误并突然丢失我的提交消息,因为 git things vi 没有写入文件
我怎样才能修复这种行为,使其不再发生并始终返回 0,除非写入文件时出现真正的错误?
答案1
这是在 vim 中故意完成的:
/* 当在 Ex 模式下运行时,错误导致我们以非零退出退出 * 代码。 POSIX 要求这样做,尽管从 * 标准。 */ 如果(exmode_active) 退出值 += ex_exitval;
- 该
ex_exitval
变量由错误消息设置emsg
:
被叫_emsg = TRUE; 如果(emsg_silent == 0) ex_exitval = 1;
- 并且
ex_exitval
是绝不已清除。
因此,ex 模式下的“任何”错误消息(:
命令)将产生此结果。快速检查表明 vi 模式ZZ
也受到 ex 模式错误消息的影响。