代码之家  ›  专栏  ›  技术社区  ›  Imperishable Night

为什么当发生任何错误时,作为别名“vi”运行的vim返回非零退出代码?

vim
  •  4
  • Imperishable Night  · 技术社区  · 8 年前

    在我的系统(Mac OS X)上, vi 别名为 vim 不及物动词 ,其退出代码的行为不同:当会话期间发生任何错误时,它将返回非零退出代码,如以下测试所示:

    • 在终端中,用vim打开任何文件。
    • 做一些编辑。
    • 尝试使用退出 :q . 这将导致错误(自上次更改后没有写入)。
    • 使用退出 :q! 或 :wq .
    • 类型 echo $?

    如果我使用,返回代码将为0 vim公司 在打开vim的第一步中,如果使用 不及物动词 .

    这个问题可能是 Vi is aliased to vim but exit with code 1 .

    1 回复  |  直到 8 年前
        1
  •  0
  •   Imperishable Night    8 年前

    经过一些搜索,我在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

    >

    显然,许多实用程序都有这样的退出状态规范,这通常是相当合理的。不适用于 vi 不过:作为一个交互式编辑器,完全有可能某些命令会导致错误(“发生错误”),但整个编辑器会正常退出(“成功完成”)。因此,规范本身是模糊和/或矛盾的,这取决于您的观点。

    显然,编写POSIX测试套件的人决定“成功完成”的定义应该严格:如果发生任何错误,就不是成功完成。因此 vim 没有通过测试。

    当然,如果vim的代码被称为 不及物动词 . 由于最新版本的vim似乎没有表现出这种行为,我猜Mac OS X的家伙可能自己引入了这个补丁,以通过POSIX测试。在使用诸如 git commit 可能是他们最不关心的。