由于某种原因,quickfix 文件类型插件的包含防护在其内容更改时不起作用。
在~/.vim/ftplugin/qf.vim
上插入以下内容
if exists("b:did_ftplugin")
finish
endif
call input("qf.vim!")
发出:copen
后可以看到来自input()
的消息。
但是,尽管包含防护是通过 $VIMRUMTIME
上的默认文件类型插件设置的,如 :echo b:did_ftplugin
和 :1verbose setlocal STL
,发出 :copen
、:cold
、:cnew
或 :helpg helpg
也会导致消息被显示。
这种情况发生时不需要额外的插件,并且除了文件类型插件缩进
之外没有其他设置
并设置不兼容
。
我的第一个猜测是任何刷新快速修复窗口的命令都会关闭现有缓冲区并打开一个新缓冲区。但在上面的 endif
之后包含 let b:did_ftplugin = 1
可以避免文件类型插件重新加载,因为在第一个 :copen
之后不会显示任何消息(但完全跳过默认文件类型插件,因为不再设置 'STL'
)。
默认文件类型插件上设置的b:did_ftplugin
与我的主目录中设置的b:did_ftplugin
之间有什么区别?
最佳答案
quickfix 窗口主要是一个 View (窗口),尽管(出于实现原因)它由 Vim 缓冲区支持。当我 :cclose
快速修复窗口,然后再次 :copen
时,:ls!
命令显示递增的缓冲区编号。我认为这可以解释您所看到的行为。
关于vim - Quickfix ftplugin 包含防护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21455281/