私はvimでcscopeを使用しています。複数のファイルに対して大規模な編集を行う場合、cscopeは変更されたファイルの古い行番号を報告します。失うことなくvimからcscopedbを再構築するにはどうすればよいですか?
- vimで開いたタブ/ウィンドウ
- cscopeエンジンとの接続
ありがとう
まず、cscopeデータベースを更新する必要があります。
:!cscope -Rbq
次に、vimからデータベースを再初期化します。
:cs reset
以前の回答に基づいて、これを.vimrcに追加します。
map <F5> :!cscope -Rb<CR>:cs reset<CR><CR>
次に、vim内でF5を使用して更新を行います。
-b=相互参照のみを作成します。-R=ソースファイルの検索中にサブディレクトリを繰り返します。
cscope_dynamicは、あなたが求めるすべてのこと、さらにはそれ以上のことを行います。
2つのデータベースを使用します。
編集: Feb17: cscope_dynamicがこれらすべてをそのまま実行するため、古い回答を削除しました。
バックグラウンドでインデックスを作成し続けるスクリプトを使用します。
" We need to setup the function that reset cscope.
"You could define this in your vimrc instead.
vim --servername GVIM --remote-send ":function! ResetCscope()<CR>cscope reset<CR>endfunction<CR>"
while true ; do
echo building...
ctags -R
cscope -Rbk
vim --servername VIM --remote-expr "ResetCscope()"
echo done. sleeping.
sleep 1m
done
で開始した場合、vim呼び出しはvimでcscopeデータベースをリロードする必要がありますvim --servername VIM
。(私はバックグラウンドコマンドを使用してcscopeクエリを実行しているので、これについてはよくわかりません。このコマンドはcscopeを個別に起動し、Vimの接続を使用しません。)
最近WindowsのgVim8.0でこれを試しましたが、csがリセットされた後でも、vimがcscope.outをロックしていたため、csはvimを開いた状態でcscope.outを再生成できませんでした。
この場合、次の追加のマッピング(たとえば、F12)を追加しました。これにより、現在のcscope接続が強制終了され、cscopeはvimを閉じなくてもF11でcscope.outを再生成できます。これが誰かを助けることを願っています。
map <F11> :!cscope -Rbq<CR><ESC>:cs add cscope.out<CR><CR>
map <F12> :cs kill cscope.out<CR><CR>