我正在使用 quickfix 并且我已对其进行了设置,以便在 Quick fix 命令之后立即运行 cwindow。另外,我有一个 C++ 源文件的模板文件,我想在新源文件的开头复制它。这是我的.vimrc:
augroup SourceTemplate
autocmd!
autocmd bufnewfile *.c,*.cpp,*.hpp,*.h so /home/username/.vim/template.cpp
augroup QuickFix
autocmd!
" #1 autocmd QuickFixCmdPre * augroup! SourceTemplate
" #2 autocmd! SourceTemplate bufnewfile
autocmd QuickFixCmdPost [^l]* nested cwindow
autocmd QuickFixCmdPost l* nested lwindow
augroup END
我的 template.cpp 文件的开头有一个 :insert 和一个 '.' 最后,我想在新源文件的开头插入一些文本。如果我只使用其中一个,上面的两个 augroup 工作得很好!
问题是,每当我运行 :make 时,quickfix 命令都会在底部打开一个窗口,正如预期的那样,但我也看到了一个新缓冲区,其中包含我的模板文本(而不是我正在编辑的文件)。在执行 Ctrl-G 时,显示的文件名是(在一种情况下)“在文件中包含...”,这也是 cwindow 中突出显示的行。因此,由于某种原因触发了 bufnewfile 事件,我需要禁用与 bufnewfile 对应的 autocmd,以防出现 quickfix。我能够想到几个解决方案。但是它们都没有像我希望的那样工作。
如果我取消上面#2 的注释,SourceTemplate 组将被永久删除。它的命令甚至不会在新文件上执行。如果我取消注释 #1,SourceTemplate 命令根本不会被禁用并且问题仍然存在。
我如何实现这一目标?