LoginSignup
63
66

More than 5 years have passed since last update.

[Linux][開発] GNU GLOBALとvimで快適な開発環境を手に入れる

Last updated at Posted at 2016-05-30

これまでソースコードを読む時に複数の端末を用意して、grepして定義を探したりしていたのですが、大きなコードになると検索量も多くなって嫌になってたところ、「GNU GLOBALを使うと幸せになれる」と聞いたので試しに使ってみました

準備: GNU GLOBALのインストール

以下の公式サイトから[Download]を開き、Source archiveにある最新のソースコードをダウンロードします

この記事では、6.5.4 のバージョンを使用しています。また、システムを自由に変更できない環境を想定して、make installを行わない手順となっています。必要に応じて適宜読み替えてください

ダウンロードした圧縮ファイルを解凍し、configure と make を実行します


$ tar xvf global-6.5.4.tar.gz
$ cd global-6.5.4
$ ./configure
$ make

コンパイルした global と gtags をホームディレクトリに作成した bin ディレクトリにコピーします


$ mkdir -p ~/bin
$ cp global/global ~/bin
$ cp gtags/gtags ~/bin

※ GNU GLOBALをシステムにインストールしても構わないのであれば、コピーする代わりに make install を実行してください

vimのプラグインを ~/.vim/plugin にコピーします


$ mkdir -p ~/.vim/plugin
$ cp gtags.vim ~/.vim/plugin

~/.vimrc にgtagsの設定を追加します

map <C-h> :Gtags -f %<CR>
map <C-j> :GtagsCursor<CR>
map <C-n> :cn<CR>
map <C-p> :cp<CR>

準備: ソースコードを解析する

解析したいソースコードのディレクトリに入り、gtagsコマンドを実行します。"-v"オプションは処理中のメッセージを表示するためのものです

$ gtags -v

GPATH、GRTAGS、GTAGS という3つのファイルが作成され、これらのファイルにコードの解析結果が入っています。ソースコードに修正が入った場合は、再度gtagsコマンドを実行して解析しなおす必要があります

補足: バージョン管理を行っている場合

git や subversion などでバージョン管理を行っている場合、gtagsで作成された解析結果を間違ってcommitしないように注意しましょう。ignoreの条件(除外リスト)に入れておくのが良いかもしれません

gitの場合は .gitignore 、subversionの場合は .svnignore に以下を追加します


GPATH
GRTAGS
GTAGS

subversionの場合は加えて、条件を適用するために以下のコマンドを実行します (gitは .gitignore に追加するだけでよい)

$ svn propset svn:ignore -R -F .svnignore .

globalコマンドの使い方

globalコマンドで主に次の事が行えます。また、各コマンドで "-x" オプションを付けるとヒットした場所の詳細(ファイル名と行数、行の内容)が表示されるようになります

関数が定義されているソースを調べる

コマンド

global ${関数名}

実行例


$ global Init_ext
dmyext.c

ソースの中に定義されている関数を調べる

コマンド

global -f ${ソースファイル}

実行例


$ global -f main.c
RUBY_EXPORT        12 main.c           #undef RUBY_EXPORT
main               23 main.c           main(int argc, char **argv)

関数が呼び出されているソースを調べる

コマンド

global -r ${関数名}

実行例


$ global -r Init_ext
internal.h
nacl/pepper_main.c
ruby.c

grepして指定したキーワードが入っているソースを探す

コマンド

global -g ${条件}

実行例


$ global -g win32
dir.c
ext/fiddle/function.c
ext/fiddle/libffi-3.2.1/src/dlmalloc.c
ext/fiddle/libffi-3.2.1/src/x86/ffi.c
ext/fiddle/libffi-3.2.1/src/x86/win32.S
ext/io/console/console.c
ext/nkf/nkf-utf8/nkf.h
ext/tk/tcltklib.c
ext/win32ole/win32ole.c
ext/win32ole/win32ole.h
      : (略) :

普通にgrepかけた時とは違い、ファイル名のみが出力されます

vimエディタとの連携

上の準備の手順で、vimのプラグインを入れた状態で、ソースコードをvimで開いて以下の操作をします

ソースコードの関数一覧

Ctrl + h を押すと、下部にそのソースの関数が表示されます

Ctrl + n でリストのカーソルを下に移動します
Ctrl + p でリストのカーソルを上に移動します

カーソル位置の関数にジャンプ

調べたい関数にカーソルを合わせ Ctrl + j を押すと、その関数の中にジャンプします

ジャンプする前の位置に戻るには Ctrl + o を押します

調べると、他にも色々な使い方があるようですが、ここでは基本的な使い方までで留めておきます

63
66
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
63
66