スパム対策として書込み時にID/PWを要求されますが、ローマ字で ほげ/ホゲ で書き込めるようになります。

#navi(../)

* GNU GLOBAL を使う [#vcfcbd16]
-ページ:     [[tips]]
-カテゴリー: プログラミング支援
-投稿日:     2005-01-21 03:43:03 (金)

#contents
**GLOBAL とは? [#a6e6189d]
タグ作成ツール。簡単に言えば ctags の高機能版。~
ctags よりもうれしいところは、関数の呼び出し元を参照できることと、~
ソースを html 化できること。~
ただし対応言語は C, C++, Yacc, Java, PHP4 and assembly のみ。

**インストール [#qb0dbf92]
http://tamacom.com/global-j.html~
から global-x.x.x.tar.gz をダウンロードして~

 $ tar xzvf global-x.x.x.tar.gz
 $ cd global-x.x.x
 $ ./configure
 $ make
 $ su
 Passward:
 #make install
で /usr/local/bin にインストール完了。~
最後に vim スクリプトをコピー。~
 $ cp /usr/local/share/gtags/gtags.vim ~/.vim/plugin

***Windows版バイナリ [#qa555c8b]
http://www.geocities.com/jadoxa/global/index.html

からダウンロードして、展開してbinにPATHを通せばOK。

**使い方 [#k7e78aab]
まずはソースファイルのあるディレクトリに移動して
 gtags
 gtags -v
でタグ作成。GPATH   GRTAGS  GSYMS   GTAGS の4つのファイルができる。~
~
***コマンドラインからの使い方 [#vce57566]
 % global func1
 DIR1/fileB.c            # func1() は fileB.c で定義されている
'-t' オプションで ctags フォーマット表示
 % global -t func1
 main    cscanner.c      2917
 main    hoge.c  5
 main    llmain.c        367
'-r' オプションで参照元表示
 % global -r func2
 ../DIR1/fileA.c         # func2() は fileA.c で参照されている
POSIX 正規表現も使える
 % global 'func[1-3]'
 DIR1/fileB.c            # func1, func2 and func3 are matched

'-x' オプションで詳細表示
 DIR2/fileC.c
 % global -x func2
 func2              2 DIR2/fileC.c       func2(){ i++; }
 func2              4 DIR2/fileC.c       func2(){ i--; }
'-a' オプションで絶対パス表示
 % global -a func1
 /home/user/ROOT/DIR1/fileB.c

***Vim からの使い方 [#ne961609]
    :Gtags main
で global -t main を実行し、結果をエラーウィンドウで開く。~
'-r' で参照元一覧をエラーウィンドウに表示~
 :Gtags -r func1
'-g' でgrep~
 :Gtags -g 'pattern'
main.c 内のオブジェクト一覧
 :Gtags -f main.c               <- locate objects in main.c
% や # も使える
 :Gtags -f %                    <- locate objects in main.c

**html を作成するには [#z403986d]
 $ htags -saFf
で ./HTML 以下に作成される。~

google "GNU global" for more information.

**Windows版Vimでgtags.vimを使う方法 [#dadbb09d]
Vim6スクリプトお勉強スレ >>619より

gtags.vim(version 0.2)を以下のように修正。
 303行目:
 -     let stuff = system(cmd . '>' . tmpfile)
 +     if has("win32")
 +         silent execute "!" . cmd . ">" . tmpfile
 +     else
 +         let stuff = system(cmd . '>' . tmpfile)
 +     endif

silent execute "!" . cmd . ">" . tmpfileの部分を
 call system(cmd . '>' . tmpfile . "& exit")
としてもよい。DOS窓がでなくなる。

**:Gtagsのエラーリストを詳細表示にする方法 [#d84ee9c0]
:Gtagsのエラーリストは検索した文字列しか表示してくれないので、
grepみたいにマッチした行全体を表示したい。

gtags.vim(version 0.2)を以下のように修正。要sed。
 302行目:
 -    let cmd = 'global' . sep . '-tq' . option . sep . pattern
 +    let cmd = 'global' . sep . '-xq' . option . sep . pattern
 +    let cmd = cmd . " | sed 's/^[^ ]* *//' "
 318行目:
 -    let &efm="%m%\\t%f%\\t%l"
 +    let &efm="%l%\\s%f%\\s%m"

**:Gtags -g 'パターン'で、パターンにスペースが含まれるとうまくいかない問題の修正 [#p254d6e6]
gtags.vim(version 0.2)を以下のように修正。
 204行目:
 +    let state = 0
 +    let prev_c = ''
 211行目:
 -        if c == ' '
 +        if i > 0
 +            let prev_c = a:str[i - 1]
 +        endif
 +        if c == "'" && prev_c != '\'
 +            let state = state == 0 ? 1 : 0
 +        endif
 +        if c == ' ' && state == 0
 230行目:
 -                if c != ' '
 +                if c != ' ' || state != 0

** メッセージ [#na51a427]
----
-htags は gtags の後に実行しないといけない。あと、htags は screen の中で実行するとエラーになる。Debianのパッケージには gtags.vim が入ってなかった… orz   --  &new{2005-04-06 04:20:29 (水)};
-global コマンドはカレントディレクトリに GTAGS が無いと再起的に上のディレクトリを捜しに行く見たい。 --  &new{2005-04-06 04:22:00 (水)};
-グローバルやローカル変数の参照個所も特定できればうれしいのですが --  &new{2005-04-19 10:21:13 (火)};
-詳細表示でsedがなくても318行目を「let &efm="%m%\\t%f%\\t%l,%l%\\s%f%\\s%m,%m%\\t%l\\t%f," . pattern . " %.%# %l %f %m"」としたらできました。(Win32版にて) --  &new{2006-08-16 09:04:19 (水)};
-Win32版ですが上記の方法ではうまくいかない場合があったので、318行目を「let &efm="%*\\w%*\\s%l%\\s%f%\\s%m"」と修正したらうまくいきました。 --  &new{2007-01-05 12:54:03 (金)};

#comment

#navi(../)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS