Это сделано намеренно в vim:
": wq"
, ex_exit
], getout
с номинальным кодом выхода 0
, getout
, он проверяет наличие ошибки в экс-режиме, комментируя /* When running in Ex mode an error causes us to exit with a non-zero exit * code. POSIX requires this, although it's not 100% clear from the * standard. */ if (exmode_active) exitval += ex_exitval;
ex_exitval
устанавливается сообщением об ошибке в emsg
: called_emsg = TRUE; if (emsg_silent == 0) ex_exitval = 1;
ex_exitval
никогда не очищается. Таким образом, "любое" сообщение об ошибке в экс-режиме (команды :
) даст такой результат. Быстрая проверка показывает, что на vi-режим ZZ
также влияют сообщения об ошибках ex-mode.