vim起動時に「E568: duplicate cscope database not added」
vimでcscopeを使うために.vim/plugin/cscope_maps.vimをインストールし、環境変数CSCOPE_DBにcscopeデータベースのパスを設定したら、vim起動時にエラーが出てしまった。
Error detected while processing /homes/shini/.vim/plugin/cscope_maps.vim: line 45: E568: duplicate cscope database not added
cscope_maps.vim以外にcs addを実行しているところは他に見当たらない。試しにcscope_maps.vimを削除してvimを起動し、「:cs show」を実行しても、接続されているデータベースは出てこないから、やはりcs addしているのはこのプラグインだけである。まるで「cs add $CSCOPE_DB」の行を2回実行しているようにみえる。
いろいろ調べて、.vimrcの次の行が原因だと判明した。
set runtimepath+=~/.vim/
もともとUNIXのvimで$HOME/.vimはruntimepathの先頭に入っているのに、末尾に再び付加することによって、pluginディレクトリ内のvimスクリプトを二重に読み込んでいた。他の人の.vimrcを参考にカスタマイズしていたとき、自分の環境では必要がないのに気付かず、そのままコピーしたらしい。
ちなみにRHELでは、/etc/vimrcの中でcscope_maps.vimと同じようなことをやっており、さらにRHEL付属のvimはシステムvimrcが/etc/vimrcに固定されている。pluginディレクトリの実行が1回だけでも、やはり「E568: duplicate cscope database not added」が起きる。この場合は
- cscope_maps.vimを編集して/etc/vimrcと重複する部分を削除する。
- 必要な部分(nonmapなど)を.vimrcにコピーする。
- 必要な部分(nonmapなど)を別ファイルにして、.vimrcからsourceで読み込む、
- 「set nocsverb」を指定して、メッセージを抑止する対症療法。
という対策がある。set nocsverbは以下の箇所(3行目)に挿入する。
" Set nocsverb not to print "E568: duplicate cscope database not added" message.
" See :help cscope or http://vimdoc.sourceforge.net/htmldoc/if_cscop.html
set nocsverb
" " add any cscope database in current directory
if filereadable("cscope.out")
" cs add cscope.out
" else add the database pointed to by environment variable
elseif $CSCOPE_DB != ""
cs add $CSCOPE_DB
endif
viimのヘルプに、データベースを追加する前にcsverbをリセットし、追加後にセットしろと書いてあり、/etc/vimrcはそうなっている。もっとも、これは別の理由かもしれない。
Ideally, you should reset this option in your |.vimrc| before adding any cscope databases, and after adding them, set it. From then on, when you add more databases within Vim, you will get a (hopefully) useful message should the database fail to be added.
| 固定リンク
この記事へのコメントは終了しました。




コメント