f

2017-08-17

How to Ignore case with cscope in Vim

cscopeはデフォルトのままだと大文字小文字を区別する。しかし,うろ覚えの記憶を頼りに検索をする場合,大文字小文字の区別はしないでほしいことがよくある。そこでVimからcscopeを使うときに,大文字小文字を無視する方法を記す。

解決策がないか調べてみたところ,このフォーラムでBob Harrisが言及している方法を使えば解決できそうだ。

I have 2 ideas.
:help cscope
says
:cs add {file|dir} [pre-path] [flags]
So you should be able to include -C in the [flags] field
:cs add cscope.out /some/path/src -C
And if that doesn't work, then write a script to invoke cscope
with the -C option
#!/bin/sh
cscope -C "$@"
And set the csprg variable to point to your script
:set csprg=/path/to/your/cscope.sh
Bob Harris
Bob Harris - About -C switch of cscope - Google グループ

cscopeには検索時の大文字小文字を無視する-Cオプションが存在しており,vimから使うときは初回のデータベース読み込み時に-Cオプションを指定すればいい。

Bob Hrrisは2番目の方法として-Cオプションを常に使うためにシェルスクリプトを間に挟む方法を提案している。しかし,この方法は依存関係が増え,手間が余計にかかるので,1番目の方法でうまくやるようにする。

[pre-path]にはcscopeのデータベースファイル(cscope.out)で参照されている相対パスのルートディレクトリーを指定する必要がある。

手動で毎回指定するのは煩雑なので,以下のコードに示すとおりに,vimの起動時のディレクトリーか,環境変数のパスを取得してやれば解決する。

Run cscope with ignore case in Vim
if executable('cscope')
  if filereadable('cscope.out')
    execute 'cscope add cscope.out ' . expand('%:p:h') . ' -C'
  elseif filereadable($CSCOPE_DB)
    execute 'cscope add $CSCOPE_DB ' . matchstr($CSCOPE_DB, '.*[/\\]') . ' -C'
  endif
endif

expand('%:p:h')で現在バッファーのディレクトリを取得している。また,環境変数から参照する場合は正規表現により取得している。Windows環境でも対応できるように,パス区切りに\が来ても大丈夫なようにした。

これでVimからcscopeを使ったソースコード探索がさらに楽になる。

なお,大文字小文字を区別したくなった場合は,手間だが以下のようなコマンドでcscopeのデータベースとの接続を解除して,再接続してやる。

:cscope kill #1
:cscope add cscope.out

0 件のコメント:

コメントを投稿