由于某些原因,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 on
和set nocompatible
以外的其他设置。
我的第一个猜测是,任何命令刷新quickfix窗口关闭现有的缓冲区并打开一个新的。但在上面的endif
之后包括let b:did_ftplugin = 1
可避免文件类型插件重新加载,因为在第一个:copen
之后没有显示任何消息(但由于'stl'
未设置,因此默认文件类型插件完全被跳过)。
在默认文件类型插件上设置的b:did_ftplugin
和从我的主目录中设置的b:did_ftplugin
之间有什么区别?
这是出于好奇,还是受到这种行为的负面影响? –
实际上,这种行为困扰我,因为我喜欢quickfix窗口跨越整个窗口,当垂直分割存在时,所以我在文件类型插件中包含'wincmd J'。但是有时候我的屏幕布局会变得混乱,并且由于包含警卫的问题,我追查了重复'wincmd J'的原因。尽管我删除了它,并在许多地方用':botright copen'替换了':copen',但当我忘记了问题并输入':cope'或者当它被新插件打开时,这仍然很麻烦。所以我想把这个命令放回到filetype插件上。 – mMontu
如果玩QuickFixCmdPost,只有在填充新的quickfix列表时才会做出反应,那该怎么办? (或增加一个计数器,让你知道你什么时候真的在处理一个新的quickfix列表?) –