で外部コマンドを実行すると:!
、Vimは外部コマンドが端末に書き込んだ可能性があるものを認識しないため、続行する準備ができていることを確認するまで待機します。
これを回避するには、次のsystem()
ような関数を使用できます。
autocmd BufWritePost *.cpp call system("ctags -R")
autocmd BufWritePost *.h call system("ctags -R")
これを1つのコマンドに簡略化することもできます。
autocmd BufWritePost *.cpp,*.h call system("ctags -R")
呼び出しの問題system()
は、生成する可能性のあるエラーメッセージを失うことです。これecho
はcall
、次のようにの代わりに使用することで解決できます。
autocmd BufWritePost *.cpp,*.h echo system("ctags -R")
ただし、コマンドが成功すると空の行が表示にエコーされ、「Enterキーを押すか、コマンドを入力して続行」という別のプロンプトが表示されます。そのための最も簡単な解決策は、コマンドラインの高さを増やすことです。
:set cmdheight=2
もう1つのより複雑な解決策は、メッセージがある場合にのみメッセージをエコーすることです。次に、画面スペースを失うことなくプロンプトを回避します。
autocmd BufWritePost *.cpp,*.h let msg=system('ctags -R') | if msg!="" | echo msg | endif