缓冲区删除后退出Vim(bd)

时间:2011-04-24 01:08:24

标签: vim

根据answer of this question :bd,当它是最后一个缓冲区时,不应该退出Vim(GVim)。不幸的是,在我的情况下它确实关闭了GVim。我对bd有什么不妥吗?

我也在使用预配置的vimrc文件。也许那里的场景会产生那种影响,但我找不到它。

1 个答案:

答案 0 :(得分:16)

尝试执行以下操作:

: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来缩小应检查的插件数量。获得autocmd组列表后(在输出中的事件名称之前显示了augroup名称:railsPluginDetect是其中一个组),删除其中的事件(augroup {GroupName} | execute 'autocmd!' | augroup END)并找出要声明的插件

或者,您可以使用调试器:

debug bd

,然后s<CR>n<CR><CR><CR>...直到vim退出;不要忘记在退出之前记住vim在>提示上面显示的内容。