vimとctagsでコードリーディング 公開用
DESCRIPTION
社内の勉強会LTで発表したスライド。 VimとctagsでCPANモジュールのコードを読む話ですTRANSCRIPT
2014/05
Vimとctagsでコードリーディング勉強会LT
自己紹介
✤ @Kesin11
✤ 大学:豊橋技術科学大学(愛知県)
✤ 研究:自然言語処理/音声言語処理
✤ 言語:Python
✤ 近未来予想
✤ 音声認識は実用的になる
✤ YouTubeでは講演で話されている情報を直接検索することが可能になる
コードリーディングをするときの悩み
✤ ある場所で呼ばれている関数やクラスが何をしているか確認したい
✤ いちいちモジュールのファイルを開くのがめんどくさい
✤ CPANモジュールはだいたい階層が深くなる
✤ EclipseのF3みたいな定義元にジャンプする機能無いの?
それ、Vimならctagsを使えば プラグインなくてもできるよ!
ctags
✤ 関数の定義場所などを記録したタグファイルを生成してくれる
✤ インストール
✤ CentOS
✤ yum ctags
✤ Mac
✤ brew ctags
✤ (OSX標準のctagsはBSD系なので使えないオプションがある)
ctags 使い方
✤ プロジェクトのルートディレクトリ上で$ ctags -R
✤ 再帰的に全てのソースを解析してtagsファイルを生成してくれる
✤ PerlだとCartonでモジュールを管理するので簡単
Vimでの操作
✤ :set tags=./tags
✤ デフォルトでカレントディレクトリのtagsを読むので通常は不要
✤ ジャンプ: <Ctrl + ]>
✤ 戻る: <Ctrl + t>
✤ 複数の候補から選択ジャンプ: g → <Ctrl + ]>
✤ ウィンドウ分割してジャンプ: <Ctrl + w> → <Ctrl + ]>
デモ
✤ cpanm ̶look SQL::Maker
✤ ctags -R
✤ vim
✤ Perlでの関数ジャンプ、モジュールジャンプ
ここからtips
便利なctagsオプション
✤ タグを出力するディレクトリの指定、tags以外の名前に変更
✤ ctags -f (今回はパス)
✤ 追記でタグを生成
✤ ctags -a
✤ タグを生成する言語を指定
✤ ctags ̶languages=Perl,JavaScript
✤ 対応している言語は--list-languagesで確認できる
tagsファイル自動生成
✤ プラグインを使う(使ったこと無いけど多分何かある)
✤ Gitのフックを使ってコミット時に自動生成
✤ $ vim .git/hooks/post-commit ←(chmod +xで実行権限を忘れずに)
✤ $ cd `git rev-parse ̶show-toplevel` ← gitで管理してるトップディレクトリに移動
✤ $ ctags -R local ← catronでインストールしたモジュールでtagsファイルを作り直し
✤ $ ctags -a -R lib ← 自分のAmon2のWebアプリをtagsに追記
ジャンプの代わりに垂直分割して開く
✤ 標準機能にはないが.vimrcに以下のコマンドを書くと可能
✤ map v<C-]> :vsp <CR>:exec("tag “.expand("<cword>"))<CR>
✤ 上の例だとv → Ctrl + ]で垂直分割して開く
標準ライブラリにもジャンプしたい
✤ perldoc -l CGIなどで標準ライブラリの場所を調べてctags
デモ
✤ ctags -a -R 標準ライブラリへのパス
✤ vim
Vim使ってないけど
✤ EmacsやSublime Textでもctagsは使えるらしい
✤ 他のエディタ界隈は全く知らないので、実際は何を使ってるのかツッコミお待ちしています
参考
✤ 実践Vim(書籍)
✤ ctagsを使ってVimでCode Readingを加速する
✤ http://labs.timedia.co.jp/2010/12/codereading-with-ctags-on-vim.html
✤ ctagsをちゃんと使う
✤ http://qiita.com/soramugi/items/7014c866b705e2cd0b95
✤ ctagsと連携するように環境を構築する
✤ http://qiita.com/soramugi/items/f918020c2b3f48c93bf3