確認プロンプトなしで* .hおよび* .cppファイルの保存時に「ctags -R」を実行するにはどうすればよいですか?


8

これはnoobの質問なので、基本的にはvimでctags -Rソースファイルまたはヘッダーファイル(*.hまたは*.cpp)に書き込んでいるときに実行したいので、次のことを試しました。

autocmd BufWritePost *.cpp :!ctags -R
autocmd BufWritePost *.h :!ctags -R

動作するようですが、保存するたびに確認が必要なので、次のようにEnterキーを押す必要があります。

"coap/coap_pdu_ll.h" 30L, 793C written
:!ctags R

Press ENTER or type command to continue

確認を取り除く方法はありますか?

回答:


10

で外部コマンドを実行すると:!、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()は、生成する可能性のあるエラーメッセージを失うことです。これechocall、次のようにの代わりに使用することで解決できます。

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

2

C ++を使用しているように見えるので、コンパイル時にタグを再構築しないでください。makefileにルールを追加するだけです。

その他のオプション:


本当に良い提案です。実際、私は今グーテンタグを試しています。しかし、私はほとんどがミニマリストであり、.vimrcファイルの行はプラグインよりも優れています。より大きなコードベースにはプラグインが必要だと思います。
user1135541
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.