如果打开后立即退出,为什么 vim 会返回非零退出代码?

Han*_*Gay 16 osx vim

我在使用vimSnow Leopard 时遇到了一个奇怪的问题:我通过简单地运行vim然后退出得到一个非零退出代码。

$ vim
# exit immediately using :q
$ echo $?
1
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用 的完整路径vim,则不会看到这种行为

$ /usr/bin/vim
# exit immediately using :q
$ echo $?
0
Run Code Online (Sandbox Code Playgroud)

起初我以为vim来自我路径中较早的某个地方,但是:

$ which vim
/usr/bin/vim
Run Code Online (Sandbox Code Playgroud)

所以我不知所措。什么可能导致这种情况?

更新:这个问题已经神奇地自行解决了,这让我非常怀疑。我目前最好的理论是,我在以.vimrc其他方式调整设置时意外修复了我的或插件的问题。如果我能准确地追踪到我做了什么来修复它,我肯定会更新这些信息。感谢您的回答。

小智 14

你有filetype off你的vimrc?尝试将其替换为:

filetype on
filetype off
Run Code Online (Sandbox Code Playgroud)

我在 OS X 上使用 Tim Pope 的 Pathogen 时遇到了这个问题。这篇文章帮助我解决了这个问题。如果您使用病原体...

call pathogen#runtime_append_all_bundles()
Run Code Online (Sandbox Code Playgroud)

...改为这样做:

filetype on
filetype off
call pathogen#runtime_append_all_bundles()
call pathogen#helptags()
filetype plugin indent on
Run Code Online (Sandbox Code Playgroud)

http://andrewho.co.uk/weblog/vim-pathogen-with-mutt-and-git


Gil*_*il' 8

我能想到两种可能的解释。

  1. vim实际上是一个别名。请注意,which不显示别名,你应该使用type,而不是(除非你正在运行csh或tcsh)。

  2. Vim 在相对于其安装目录的路径中查找某个文件,它通过查看argv[0](从 shell 传递的可执行文件的名称)来确定,如果通过相对路径调用它,则不知何故无法找到该路径。这在技术上是可行的,但我认为 Vim 实际上不会这样做。


War*_*ung 7

我通过简单地运行 vim 然后退出得到一个非零退出代码。

这不会发生在这里,使用类似的系统:Snow Leopard 和 Vim 的股票版本。

试试这个命令:

$ sudo dtruss vim +q
Run Code Online (Sandbox Code Playgroud)

这将为您提供 Vim 在初始化然后立即关闭时所做的所有系统调用的列表。(dtruss相当于strace在 Linux 上,如果你以前用过的话。)

您要查找的是接近末尾的一行,该行显示错误代码,通常为 -1。查看系统调用的参数应该会导致您遇到问题。一个很有可能的可能性是丢失文件,它可能会出现在open()通话中。

如果 Vim 在以这种方式运行时干净地退出,您可能有权限问题,sudo允许dtruss运行所需的权限正在解决。在这种情况下,您可能可以通过修复权限来修复它。