在我的系统(Mac OS X)上,vi
的别名为vim
。但是,当以vi
运行时,其退出代码的行为是不同的:当会话期间发生任何错误时,它将返回非零退出代码,如以下测试所示:
:q
退出。这会导致错误(自上次更改后无写入)。:q!
或:wq
退出。echo $?
。如果我在第一步中使用vim
打开vim,则返回码为0,但如果我使用vi
则为1。
此问题可能是Vi is aliased to vim but exit with code 1的根本原因。
答案 0 :(得分:0)
经过一番搜索,我在vim帮助中找到了以下注释,|posix-compliance|
部分:
In 2005 the POSIX test suite was run to check the compatibility of Vim. ...
...
- vi test 310 fails; exit code non-zero when any error occurred?
这导致我the following section of the POSIX specification of vi。
退出状态
应返回以下退出值:
0
成功完成。
大于0
发生错误。
显然,许多实用程序都有这样的退出状态规范,而且通常很合理。但不是vi
的情况:作为一个交互式编辑器,一些命令完全有可能导致错误("发生错误"),但整个编辑器正常退出(& #34;成功完成")。因此,根据您的观点,规范本身是模糊的和/或矛盾的。
显然,编写POSIX测试套件的人决定了#34;成功完成的定义"应该严格:如果发生任何错误,则不能成功完成。因此vim
未通过该测试。
当然,如果将vim的代码称为vi
,则修改vim的代码并不难以遵守规范的解释。由于最新版本的vim似乎没有表现出这种行为,我想Mac OS X的人可能已经自己引入了这个补丁以通过POSIX测试。使用像git commit
这样的实用程序的任何困难可能是他们最不关心的问题。