2012-01-14
Vimでソースコードを素早く追いかける
vim | |
Vim Advent Calender 2011 45日目の記事です。今回のテーマはソースコードを素早く追いかけるです。
Vimをお使いの皆さんは設定ファイルや文書作成以外にもソースコードを作成・メンテ・閲覧などに利用されている事と思います。
そこで、ソースコードを追いかける時に便利なプラグインをご紹介したいと思います。なお、この記事は過去に私が書いたエントリーを再構成した内容となっています。
追いかけるソースコードを用意する
まずは、追いかけたいソースコードを用意しましょう。例としてあげるソースコードはVimで世界的に有名なc9sさんが作った、巷で話題のRubyのBundler(やVimのVundle)ライクなPHP版Onionです。
$ git clone https://github.com/c9s/Onion.git cd ./Onion
プラグインを設定する
Source Explorerというプラグインを導入してみましょう。概要は以下の通りです。
The plugin (srcexpl.vim) is a source code explorer based on tags and it provides an overview of the function and type definitions.It has such a mechannism that works like the context window component of "Source Insight" software.
If you have used Source Insight for browseing C/C++/Java project before, you may find that you can browse the definitions with the Source Explorer as well as the context window of "Source Insight".
tagsを利用したソースコード閲覧・移動補助してくれます。
以前に紹介した時点ではVersion 2.3でしたが現在では4.3になり、trinity.vimというプラグインを使う事でUIが使いやすくなっています。
下記のプラグインをruntimeパスのとおったpluginディレクトリに入れましょう。
runtimeパスの確認の方法はコマンドラインモードで
set runtimepath?
通常は下記ディレクトリに「srcexpl.vim」と「trinity.vim」と「NERD_tree.vim」と「taglist.vim」を放り込めばOKです。
~/.vim/plugin/
ctags
Source Explorerはctagsというソースコードの関数や変数情報などをインデックス化する外部プログラムを利用します。また、Mac OS XではデフォルトでインストールされているもののExuberant Ctags という拡張されたctagsではない為、macportsなどでExuberant Ctagsをインストールしておきましょう。Windowsの方はKaoriyaさん配布のvimを使っている人がほとんどだと思います。Kaoriyaさんのその他コーナーでリンクされているこちらのExuberant Ctags対応ctagsをダウンロードしパスを通しておきましょう。*1
[yuki@beaune.local]$ port info ctags
Warning: port definitions are more than two weeks old, consider using selfupdate
ctags @5.8 (devel)
Variants: universal
Description: Exuberant Ctags generates an index (or tag) file of source language objects in source files that allows
these items to be quickly and easily located by a text editor or other utility. Alternatively, it can
generate a cross reference file which lists, in human-readable form, information about the various objects
found in a set of source code files. Supported languages include: Assembler, AWK, ASP, BETA,
Bourne/Korn/Zsh Shell, C, C++, COBOL, Eiffel, Fortran, Java, Lisp, Lua, Make, Pascal, Perl, PHP, Python,
REXX, Ruby, S-Lang, Scheme, Tcl, Vim and Yacc.
Homepage: http://ctags.sourceforge.net/
Platforms: darwin, freebsd
License: GPLv2
Maintainers: mww@macports.org, openmaintainer@macports.org
[yuki@beaune.local]$ sudo port install ctags
起動方法
コマンドラインモードで下記コマンドを実行します。
:TrinityToggleAll
tagsが存在しない場合は作成するかどうかを聞いてくるのでyesを選択します。
実行すると左にtaglistを使った変数やメソッドなどのアウトライン、右にファイラー、真ん中にソースコード、下にソースエクスプローラーが表示されます。
それぞれをToggleするコマンドも用意されています。
" +----------------------------------------------------------------------------+
" | File | Edit | Tools | Syntax | Buffers | Window | Help | |
" +----------------------------------------------------------------------------+
" |-demo.c-------- |-----------------------------------------|-/home/myprj/----|
" |function | 1 void foo(void) /* function 1 */ ||~ src/ |
" | foo | 2 { || `-demo.c |
" | bar | 3 } |`-tags |
" | | 4 void bar(void) /* function 2 */ | |
" |~ +----------+ | 5 { |~ +-----------+ |
" |~ | Tag List |\ | 6 } |~ | NERD Tree |\ |
" |~ +__________+ ||~ +-----------------+ |~ +___________+ ||
" |~ \___________\||~ | The Main Editor |\ |~ \____________\||
" |~ |~ +_________________+ | |~ |
" |~ |~ \__________________\| |~ |
" |~ |~ |~ |
" |-__Tag_List__---|-demo.c----------------------------------|-_NERD_tree_-----|
" |Source Explorer V4.3 |
" |~ +-----------------+ |
" |~ | Source Explorer |\ |
" |~ +_________________+ | |
" |~ \__________________\| |
" |-Source_Explorer[Preview]---------------------------------------------------|
" |:TrinityToggleAll |
" +----------------------------------------------------------------------------+
操作方法
<C-W>HやLなどでWindowを移動して3つのWindowごとの機能を素早く切り替えられるUIになっています。実際に操作してみるとわかるのですがとても使い勝手がよいことがわかります。
Source Explorerはカーソル下にある変数やメソッドの宣言やコール元のソース情報を自動で表示してくれます。もし、コール元が複数ある場合はリストで表示されるのでWindow移動して対象業でEnterを押せばジャンプできます。ジャンプや戻ったりするのも自分好みのキーを割り当てる事ができるようになっているので、設定をカスタマイズしたい場合はSource Explorerのソースコード(srcexpl.vim)ヘッダ部分を参照してみるとよいでしょう。
画面キャプチャ
メソッドの宣言を自動で表示
コール元のソース情報一覧を自動で表示
マウスでも操作できる!えッ?
最後に
アウトライン表示や宣言へのジャンプ機能などEclipseなどのIDEではできて当たり前の感覚ですが、Vimでもソースコードを参照する時にオペレータやgfやGrep他等のvim基本機能に加え、今回紹介した様なプラグインを使う事で軽快にソースコードを徘徊・把握ができるようになるのではないでしょうか。個人的には移動や表示する時の感覚が大事で「ホイホイ」と軽快に移動できると気持ちがいいですね!


