読者です 読者をやめる 読者になる 読者になる

.logbook

学んだことを書き綴る、言わば航海日誌です。

C言語のソースコードを解析するため、Vimにプラグインを追加する

前回、VimパッケージをNeoBundleで管理できるようにした。

普段使いエディタをVimにする - .logbook

近々、Cのソースをガッツリ解析することとなりそうである。そのためVimを駆使して、コード解析を容易にできないか、調査してみた。

ctagsのインストール

C言語のソース解析といえばctagsが必須だろう。サクラエディタでも非常にお世話になっている。

と、いうわけで下記コマンドにてインストールする。

$ sudo apt-get install ctags

インストールが終わったらソースの格納先へ移動し、タグファイルを作成する。

(ソースのルートディレクトリにて)
$ ctags -R

これにてVim上からタグジャンプができるようになる。タグジャンプとは関数やマクロのシンボルを追いかけて、対象の関数やシンボルの宣言部分へジャンプする機能である。

VimでCソースを開き、関数名の上で<C-]>(「Ctrlキー」+]キー)を押すと、その関数が宣言されている箇所へジャンプできる。

ctagsについては下記が参考になる。

ctagsをちゃんと使う - Qiita [キータ]

Trinityをインストール

Trinityをインストールすると、Vimeclipseのような統合開発環境(っぽい画面)になる。

こんな感じ。

f:id:ylgbk:20131211204906p:plain

各画面は下記の表示となっている。

  • 画面左→taglist(アウトライン表示)

  • 画面右→NERD_Tree(ファイルシステム表示)

  • 画面下→SrcExpl(タグジャンプ先の表示)

これをまとめて表示するのがTrinityというプラグイン。統合開発環境の表に画面を並べてくれる。画面の中でも特にSrcExplが便利で、タグジャンプしなくても関数の呼び元と呼び先を同時に確認できる。

この環境を実現するためにはNeoBundleで4つのプラグインをインストールする必要がある。.vimrcにインストールするプラグインを追記する。

set nocompatible               " be iMproved
filetype off


if has('vim_starting')
  set runtimepath+=~/.vim/bundle/neobundle.vim
  call neobundle#rc(expand('~/.vim/bundle/'))
endif
" originalrepos on github
NeoBundle 'Shougo/neobundle.vim'
NeoBundle 'Shougo/vimproc'
NeoBundle 'VimClojure'
NeoBundle 'Shougo/vimshell'
NeoBundle 'Shougo/unite.vim'
NeoBundle 'Shougo/neocomplcache'
NeoBundle 'Shougo/neosnippet'
NeoBundle 'jpalardy/vim-slime'
NeoBundle 'scrooloose/syntastic'

" コード解析用にここから追加
NeoBundle 'The-NERD-tree'
NeoBundle 'taglist.vim'
NeoBundle 'https://github.com/wesleyche/SrcExpl.git'
NeoBundle 'https://github.com/wesleyche/Trinity.git'

filetype plugin indent on     " required!
filetype indent on
syntax on

SrcExplとTrinityはgithubのURLが変更となっており、上記URLでないと上手くインストールできないので要注意である。

Trinityの操作

Vimを起動し、下記コマンドを入力すると4画面表示になる。

:TrinityToggleAll

各画面を行き来する場合、Vimの画面分割と同様に操作する。例えば、右画面に移動する場合<C-w>l, 左画面に移動する場合<C-w>hで移動できる。

Vimを閉じる場合は

:qa

と入力すれば、全ての画面を一度に閉じられる。