私はクイックフィックスを使用しており、クイックフィックスコマンドの直後に 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 と '.' があります。最後に、新しいソース ファイルの先頭に挿入したいテキストを挿入します。上記の 2 つの augroup は、そのうちの 1 つだけを使用する場合にうまく機能します。
問題は、:make を実行するたびに、予想どおり、quickfix コマンドが下部にウィンドウを開きますが、(編集していたファイルの代わりに) テンプレート テキストを含む新しいバッファーが表示されることです。Ctrl-G を実行すると、表示されるファイル名は (あるケースでは) "In file included from..." でした。これは、cwindow で強調表示された行でもありました。そのため、何らかの理由で bufnewfile イベントがトリガーされており、クイックフィックスの場合は bufnewfile に対応する autocmds を無効にする必要があります。これに対するいくつかの解決策を考えることができました。しかし、どれも私が望むようには機能しません。
上記の #2 のコメントを外すと、SourceTemplate グループは完全に削除されます。そのコマンドは、新しいファイルに対しても実行されません。#1 のコメントを外すと、SourceTemplate コマンドはまったく無効にならず、問題は解決しません。
どうすればこれを達成できますか?