SlideShare a Scribd company logo
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

More Related Content

PDF
Phpのレガシーコードをrubyで焼き変えてみた
PDF
とりあえずこれだけ知っていればお仕事ができる(であろう)gitガチ入門
PDF
OSS Study#19_LT
PDF
Frank-afcproxy
PDF
Webフレームワークパネル(Django) at PyConJP 2012
PDF
Tortoise gitで日本語ファイル名を使うときのgitの選択について
PDF
言語処理するのに Python でいいの? #PyDataTokyo
PPTX
今時のバンド
Phpのレガシーコードをrubyで焼き変えてみた
とりあえずこれだけ知っていればお仕事ができる(であろう)gitガチ入門
OSS Study#19_LT
Frank-afcproxy
Webフレームワークパネル(Django) at PyConJP 2012
Tortoise gitで日本語ファイル名を使うときのgitの選択について
言語処理するのに Python でいいの? #PyDataTokyo
今時のバンド

What's hot (20)

PDF
ニコニコ生放送のタイムシフトを無料で保存する方法
PDF
ニコニコ生放送のタイムシフトを無料で保存する方法
PPTX
Pynyumon03 LT
PDF
Hubotで遊ぶ
PDF
F*言語ワークショップ
PDF
Trend Micro CTF Asia Pacific & Japan -defensive100-
PPTX
Slack + Hubot でお前の一番好きな二次元嫁キャラと一緒に仕事をする
PPTX
SECCON2014 crypt200
PPT
オープンソースカンファレンス名古屋「高蔵寺SE勉強会」
PDF
プロ生ちゃんbotを作ろう!
PPTX
Pythonで書くじゃんね!
PDF
Goとtest coverage
PPTX
Stapy#22 LT
PDF
libpgenでパケット操作
PDF
俺とDockerとtDiaryとkubernetes
PDF
PyLadies Tokyo 二周年記念パーティ LT
PPTX
仕事でも Groovy を使おう!
PDF
LT: 今日帰ってすぐに始められるPython #nds45
PPTX
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PDF
gopherと学ぶgolang ~go fmt編~
ニコニコ生放送のタイムシフトを無料で保存する方法
ニコニコ生放送のタイムシフトを無料で保存する方法
Pynyumon03 LT
Hubotで遊ぶ
F*言語ワークショップ
Trend Micro CTF Asia Pacific & Japan -defensive100-
Slack + Hubot でお前の一番好きな二次元嫁キャラと一緒に仕事をする
SECCON2014 crypt200
オープンソースカンファレンス名古屋「高蔵寺SE勉強会」
プロ生ちゃんbotを作ろう!
Pythonで書くじゃんね!
Goとtest coverage
Stapy#22 LT
libpgenでパケット操作
俺とDockerとtDiaryとkubernetes
PyLadies Tokyo 二周年記念パーティ LT
仕事でも Groovy を使おう!
LT: 今日帰ってすぐに始められるPython #nds45
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
gopherと学ぶgolang ~go fmt編~
Ad

Similar to Vimとctagsでコードリーディング 公開用 (20)

PDF
KMC Font Project 3 - FontForgeで欧文書体製作
PDF
20130824 Lightweight Language "Go" @LL matsuri
KEY
Windowsにpythonをインストールしてみよう
PDF
ML system design_pattern
PDF
Python界隈の翻訳プロジェクト
PPTX
やさしいGitの内部構造 - yapcasia2013
PDF
Python & PyConJP 2014 Report
PPTX
211120 他人の書いたPythonスクリプトをステップ実行で理解する
PDF
Lombok ハンズオン
PDF
Django から各種チャットツールに通知するライブラリを作った話
PDF
密着!わたしのコンソールアプリ開発環境
PDF
CPythonを読もう
PDF
今日から始めるGopher - スタートGo #0 @GDG名古屋
PPT
appengine活用事例資料@TDDBC札幌2.1
PPTX
俺と otoya
PPTX
Ll tiger clojure
PDF
Django で始める PyCharm 入門
PPT
Koi::Bana〜恋に落ちたエンジニア〜
PPTX
Emscriptenと不思議のダンジョン
KMC Font Project 3 - FontForgeで欧文書体製作
20130824 Lightweight Language "Go" @LL matsuri
Windowsにpythonをインストールしてみよう
ML system design_pattern
Python界隈の翻訳プロジェクト
やさしいGitの内部構造 - yapcasia2013
Python & PyConJP 2014 Report
211120 他人の書いたPythonスクリプトをステップ実行で理解する
Lombok ハンズオン
Django から各種チャットツールに通知するライブラリを作った話
密着!わたしのコンソールアプリ開発環境
CPythonを読もう
今日から始めるGopher - スタートGo #0 @GDG名古屋
appengine活用事例資料@TDDBC札幌2.1
俺と otoya
Ll tiger clojure
Django で始める PyCharm 入門
Koi::Bana〜恋に落ちたエンジニア〜
Emscriptenと不思議のダンジョン
Ad

Vimとctagsでコードリーディング 公開用