2014-01-30 77 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是以一种特殊的方式对待它。人们需要深入了解源代码才能知道...... –