2011-04-24 29 views
7

根據answer of this question:bd當它是最後一個緩衝區時不應該退出Vim(GVim)。不幸的是,它在我的情況下關閉了GVim。我瞭解bd有什麼問題嗎?Vim在緩衝區刪除後退出(bd)

我也在使用預配置的vimrc文件。也許在那裏有一個設置有影響,但我找不到它。

+0

我試過你的.vimrc文件,但沒有相同的問題。它一定是別的東西導致它。 – nocash 2011-04-24 01:21:56

+0

感謝您試用我的vimrc。正如ZyX所說,它似乎是一個插件的問題。我在他的回答下發布了他推薦的命令的輸出。 – Zardoz 2011-04-24 10:04:26

+1

我真的很好奇插件是怎麼造成的。我希望實際上擁有這個功能。 – 2014-07-22 09:43:15

回答

15

試着做以下幾點:

:set eventignore=all | bd | set eventignore= 

如果這不會退出VIM然後你有一些插件,它定義了退出的時候沒有更多的緩衝區在列表VIM自動命令,讓後嘗試做

verbose autocmd BufWinLeave,BufLeave,BufDelete,BufUnload,BufWipeout 

這將顯示您連接到給定事件的所有自動命令(這些都是當緩衝區被刪除時執行的事件),並定義它們的位置。請注意,我沒有任何自動命令附加到由standart vim distribution中的插件定義的這些事件。

更新:我沒有看到你的輸出有什麼不好。你也可以嘗試

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在>之上顯示的內容。

+0

謝謝你的提示。事實上,這似乎是一個插件。我按照你的建議運行verbose命令,得到如下結果:https://gist.github.com/939432你知道哪些插件導致了它,以及如何覆蓋它? – Zardoz 2011-04-24 09:14:03

+0

@ Zardoz查看更新。 – ZyX 2011-04-24 12:01:35

+0

不知道什麼解決了問題,但它不再發生。如果它再次出現,我會留下評論什麼插件造成它。謝謝您的幫助。 – Zardoz 2011-04-24 13:18:43