23

私はvimでcscopeを使用しています。複数のファイルに対して大規模な編集を行う場合、cscopeは変更されたファイルの古い行番号を報告します。失うことなくvimからcscopedbを再構築するにはどうすればよいですか?

  • vimで開いたタブ/ウィンドウ
  • cscopeエンジンとの接続

ありがとう

4

5 に答える 5

31

まず、cscopeデータベースを更新する必要があります。

:!cscope -Rbq

次に、vimからデータベースを再初期化します。

:cs reset
于 2010-08-04T06:19:57.780 に答える
9

以前の回答に基づいて、これを.vimrcに追加します。

map <F5> :!cscope -Rb<CR>:cs reset<CR><CR>                                      

次に、vim内でF5を使用して更新を行います。

-b=相互参照のみを作成します。-R=ソースファイルの検索中にサブディレクトリを繰り返します。

于 2013-09-24T14:06:25.570 に答える
4

cscope_dynamic

cscope_dynamicは、あなたが求めるすべてのこと、さらにはそれ以上のことを行います。

  • vimを開くとデータベースが自動ロードされます。
  • グローバルデータベースではなく、ローカルcscopeデータベースが存在する場合はそれをロードします。
  • 接続を適切に処理します
  • 変更をデータベースに自動的に保存します
  • 特に大規模なソースベースで作業する場合は、はるかに高速です。

どれくらい速いですか?

2つのデータベースを使用します。

  • 小さなデータベース:小さな変更を加えて頻繁に更新されるため、非常に高速です
  • 大きなデータベース:小さなデータベースをこのデータベースにマージすることで、更新頻度が低くなります。

編集: Feb17: cscope_dynamicがこれらすべてをそのまま実行するため、古い回答を削除しました。

于 2015-07-07T21:23:57.230 に答える
2

バックグラウンドでインデックスを作成し続けるスクリプトを使用します。

" 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の接続を使用しません。)

于 2011-08-31T17:36:03.497 に答える
2

最近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>
于 2018-05-22T22:58:22.137 に答える