vi系ユーザのカーネルソースコード参照環境
世のカーネルハッカーの皆さんは、カーネルのソースツリーを読み書きするのにそれぞれ独自の最適化済環境を構築しているだろうと想像するのですが、ふりかえって私はといえば、Linuxカーネルを読むようになってもうすぐ3年が経とうというのに全くもって環境らしい環境さえ整えていません。
私の環境はといえば、ctags と vim と grep コマンドだけです。構築(というほどでもありませんが)手順は、kernel.org からダウンロードして展開したソースのトップディレクトリで
$ make tags ARCH=x86_64
などと実行して tag ファイルを作成するだけで終わりです。
vim から tag を利用する際も、vim online で見つかる様々なスクリプトに手を染めることもなく、 Ctrl-] やら Ctrl-T などのデフォルトのキーバインドを叩くだけです。それで足りない場面では grep コマンドに頼っています。そういえば、vi には無い vim の独自機能も殆ど知らないなぁ。。。
『住めば都』ということわざのごとく、便利でない環境にも一度慣れてしまうと気にならないものです。近頃は、マシンパワーも上がって grep コマンドも速いですしね。ところが先日、会社でハッカーの O さんに「効率化の努力を惜しんではあかん」との教えを受けたので、ちょうど良い機会(と blog ネタ)として cscope を使う環境を整えてみました。
vim online を cscope で検索すれば高機能のスクリプトが山ほど見つかりますが、元来シンプルなのが好きな(かつ CUI 作業も多い)私は、vim と cscope のオンラインマニュアルを読んで試しながらノロノロと調べて使ってみることにしたのでした。
まずは cscope のクロス・リファレンスを作成するために、展開した linux-2.6.20 のトップディレクトリで
$ make cscope ARCH=x86_64
を実行します。以下のファイルができました。
-rw-r--r-- 1 root root 88052364 2月 13 22:07 cscope.po.out
-rw-r--r-- 1 root root 118957329 2月 13 22:07 cscope.out
-rw-r--r-- 1 root root 14901248 2月 13 22:07 cscope.in.out
次に vim 上で :help cscope コマンドを実行して表示されるオンラインヘルプを参照して ~/.vimrc に以下のコードを追記しました(本当のこというと、このファイル自体さえ無かったので新規作成しました)。
if has("cscope")
set csprg=/usr/bin/cscope
set csto=0
set cst
set nocsverb
" add any database in current directory
if filereadable("cscope.out")
cs add cscope.out
" else add database pointed to by environment
elseif $CSCOPE_DB != ""
cs add $CSCOPE_DB
endif
set csverb
map <C-\> :cs find s <C-R>=expand("<cword>")<CR><CR>
" map <C-]> :cs find g <C-R>=expand("<cword>")<CR><CR>
map <C-[> :cs find c <C-R>=expand("<cword>")<CR><CR>
endif
以上で準備完了です。
いままでの ctags 環境から便利になった点といえば、 Ctrl-[ でカーソル上の関数を使用する関数に飛べることでしょうか。
cscope がサポートする検索機能は他にもあり、ヘルプには
0 or s: Find this C symbol
1 or g: Find this definition
2 or d: Find functions called by this function
3 or c: Find functions calling this function
4 or t: Find this text string
6 or e: Find this egrep pattern
7 or f: Find this file
8 or i: Find files #including this file
と書かれています。でも s,g,c の3つだけでほとんどの用が足りそうですね。
さて、たいして効率化が進まなかったような気もするのですが、気にせず今回はこれでおしまいです。この blog を読んだハッカーの皆さん、あなたの素晴らしい環境(ただし vi 系に限る)をぜひ教えてください!




http://blog.miraclelinux.com/yume/2006/09/gdbxemacscscope_e0da.html
にxemacs/gdb/cscopeのペアでの利用について書きました。
xemacs使いましょう。
投稿: hyoshiok | 2007年2月16日 (金) 22:12
viでいかに便利な環境にするか、というのが大前提なのです。
投稿: sikarash | 2007年2月16日 (金) 22:30
ちなみになんですが、組込みLinuxでよく用いられる busyboxには viもどきはありますが、emacsもどきまでは入っていないようです。
投稿: zar | 2007年2月20日 (火) 01:16