尝试按照以下步骤操作:
:set eventignore=all | bd | set eventignore=
如果这样不能退出 vim 的话,那么你可能有一些插件定义了一个自动命令,当缓冲区列表中没有更多的缓冲区时退出 vim,因此你可以尝试执行以下操作:verbose autocmd BufWinLeave,BufLeave,BufDelete,BufUnload,BufWipeout
这将向您展示所有附加到给定事件的自动命令(这些事件在缓冲区被删除时执行),以及它们定义的位置。请注意,我没有附加到由标准 vim 发行版中的插件定义的这些事件上的任何自动命令。
更新:我没有看到你输出的任何错误。你也可以尝试
verbose autocmd BufNew,BufAdd,BufCreate,BufEnter,BufWinEnter
(因为当你离开最后一个缓冲区时,会创建一个新的空缓冲区)。如果这没有显示任何可疑的内容,请开始忽略事件类型:如果你在Linux上,请尝试以下脚本:
for event in BufWinLeave BufLeave BufDelete BufUnload BufWipeout BufNew BufAdd BufCreate BufEnter BufWinEnter
do
event=$event vim file -c "set eventignore=$event | bd"
done
这个脚本应该重复执行,直到找到导致问题的事件名称。之后,您可以在vim中使用execute "verbose autocmd" $event
来缩小需要检查的插件数量。在您得到自动命令组列表之后(augroup名称会显示在输出中的事件名称之前:railsPluginDetect
就是这样的一组),删除其中的事件(augroup {GroupName} | execute 'autocmd!' | augroup END
),并找出要申报的插件。debug bd
然后输入s<CR>n<CR><CR><CR>...
直到vim退出;在退出前不要忘记记住vim在>
提示符上方显示的内容。