2014-01-30 36 views
1

由於某些原因,quickfix文件類型插件的包含警告在其內容更改時不起作用。Quickfix ftplugin包容衛士

插入上~/.vim/ftplugin/qf.vim

if exists("b:did_ftplugin") 
    finish 
endif 
call input("qf.vim!") 

下列內容從input()該消息可以發出:copen之後似乎。

但是,儘管包括防護件從默認文件類型插件設置$VIMRUMTIME,如圖:echo b:did_ftplugin:1verbose setlocal stl,發證:copen:cold:cnew:helpg helpg還導致要顯示的消息。

發生這種情況時不需要額外的插件,也不需要設置除filetype plugin indent onset nocompatible以外的其他設置。

我的第一個猜測是,任何命令刷新quickfix窗口關閉現有的緩衝區並打開一個新的。但在上面的endif之後包括let b:did_ftplugin = 1可避免文件類型插件重新加載,因爲在第一個:copen之後沒有顯示任何消息(但由於'stl'未設置,因此默認文件類型插件完全被跳過)。

在默認文件類型插件上設置的b:did_ftplugin和從我的主目錄中設置的b:did_ftplugin之間有什麼區別?

+0

這是出於好奇,還是受到這種行爲的負面影響? –

+0

實際上,這種行爲困擾我,因爲我喜歡quickfix窗口跨越整個窗口,當垂直分割存在時,所以我在文件類型插件中包含'wincmd J'。但是有時候我的屏幕布局會變得混亂,並且由於包含警衛的問題,我追查了重複'wincmd J'的原因。儘管我刪除了它,並在許多地方用':botright copen'替換了':copen',但當我忘記了問題並輸入':cope'或者當它被新插件打開時,這仍然很麻煩。所以我想把這個命令放回到filetype插件上。 – mMontu

+0

如果玩QuickFixCmdPost,只有在填充新的quickfix列表時纔會做出反應,那該怎麼辦? (或增加一個計數器,讓你知道你什麼時候真的在處理一個新的quickfix列表?) –

回答

2

quickfix窗口主要是一個視圖(窗口),儘管(實施原因)它是由一個Vim 緩衝器支持。當我:cclose是一個quickfix窗口,然後:copen它再次,:ls!命令顯示一個遞增的緩衝區號。我認爲這解釋了你所看到的行爲。

+0

我以前沒有注意過。但是這個問題發生_without_關閉quickfix窗口。執行':copen',':ls',':copen'和':ls'顯示與quickfix相同的緩衝區號。 仍然來自'input()'的消息顯示兩次。 – mMontu

+0

我不知道任何細節,但我懷疑Vim是以一種特殊的方式對待它。人們需要深入瞭解源代碼才能知道...... –