我在使用vim
Snow 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
我能想到两种可能的解释。
vim
实际上是一个别名。请注意,which
不显示别名,你应该使用type
,而不是(除非你正在运行csh或tcsh)。
Vim 在相对于其安装目录的路径中查找某个文件,它通过查看argv[0]
(从 shell 传递的可执行文件的名称)来确定,如果通过相对路径调用它,则不知何故无法找到该路径。这在技术上是可行的,但我认为 Vim 实际上不会这样做。
我通过简单地运行 vim 然后退出得到一个非零退出代码。
这不会发生在这里,使用类似的系统:Snow Leopard 和 Vim 的股票版本。
试试这个命令:
$ sudo dtruss vim +q
Run Code Online (Sandbox Code Playgroud)
这将为您提供 Vim 在初始化然后立即关闭时所做的所有系统调用的列表。(dtruss
相当于strace
在 Linux 上,如果你以前用过的话。)
您要查找的是接近末尾的一行,该行显示错误代码,通常为 -1。查看系统调用的参数应该会导致您遇到问题。一个很有可能的可能性是丢失文件,它可能会出现在open()
通话中。
如果 Vim 在以这种方式运行时干净地退出,您可能有权限问题,sudo
允许dtruss
运行所需的权限正在解决。在这种情况下,您可能可以通过修复权限来修复它。