Vimからcscope(1)を使うには、まずインデックスデータを生成しておく必要がある。FreeBSD/PC-BSDならシステムのソースコードが/usr/src/にインストールされているから、rootユーザーで/usr/src/へ移動して下に示した例のようにコマンドを実行する。こうすると、250Mbytesくらいの大きさのインデックスファイルができる。ファイル名は「cscope.out」だ。
cd /usr/src/ cscope -R -b
Vimからはノーマルモードで次のようにコマンドを実行すると、生成されたインデックスファイルを利用できるようになる(図9)。
:cscope add /usr/src/cscope.out
ちなみに、Vimからcscope(1)で生成したインデックスファイルを利用できるようにするコマンドは、以下のように短縮することもできる。
:cs a /usr/src/cscope.out
ここまでできたら、下に示す例のようにコマンドを操作すれば、キーワードを検索できる。このコマンドを実行するとFILEの定義を調べられる(図10)。
:cscope find global FILE
図10のコマンドを実行すると、/usr/src/以下で関連しそうな部分が表示される(図11)。
該当部分が現れるまでスクロールしていくと、48番が目的の定義のように見える(図12)。
図12の画面で「48」と入力して[Enter]キーを押すと、該当する部分が表示される(図13)。
cscope findは表2に示す引数を持っており、それぞれ異なる種類の検索を実行できる。ちなみに、この引数はcscope(1)コマンドのCUIから指定できるものと同じだ。
cscope findの引数 | 意味 |
---|---|
c | その関数を呼んでいる関数の検索 |
d | その関数によって呼ばれている関数の検索 |
e | egrepパターンの検索 |
f | ファイルの検索 |
g | 定義の検索 |
i | そのファイルをインクルードしているファイルの検索 |
s | そのCシンボルの検索 |
t | そのテキスト文字列の検索 |
表2 cscope findの引数と、それぞれの意味 |
findの次の指定したキーワードが検索の種類で、その後のワードが検索対象だ。例えば、定義されている部分を調べたいなら以下の例のように「g」を指定して検索すればよい。
:cs f g FILE
C言語を使っていると、この構造体の本体はどんな内容だったか、この型は実際どんなものだったか、といったことを調べなければならないということがよくある。すべてがマニュアルに記載されているわけではないので、ソースコードを読むのが手っ取り早いわけだが、grep(1)だけでこれを探すのはかなり骨が折れる作業だ。cscope(1)という便利なツールを活用することで作業を簡略化でき、さらにVimから連携して操作することでより効率の良い操作を実現できる。
最後に、ちょっとした小技を披露したい。カーソルの下にある単語をキーワードとして、同じファイルのほかの部分にそのキーワードに該当するものがあるかどうかを調べる方法だ。
調べたい単語にカーソルを移動させたら、「*」キーを押す。この状態で「n」を押せば、ファイルの後方を検索し、次に登場する同じキーワードに移動する。「N」を押せばファイルの前方を検索し、前にある同じキーワードへ移動する。特定のキーワードを対象に、同じような編集作業を繰り返すというのはよくあることなので、この方法を知っておくと何かと便利だ。
後藤大地
オングス代表取締役。@ITへの寄稿、MYCOMジャーナルにおけるニュース執筆のほか、アプリケーション開発やシステム構築、『改訂第二版 FreeBSDビギナーズバイブル』『D言語パーフェクトガイド』『UNIX本格マスター 基礎編〜Linux&FreeBSDを使いこなすための第一歩〜』など著書多数。
Copyright © ITmedia, Inc. All Rights Reserved.