SlideShare ist ein Scribd-Unternehmen logo
1 von 16
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

ニコニコ生放送のタイムシフトを無料で保存する方法
ニコニコ生放送のタイムシフトを無料で保存する方法ニコニコ生放送のタイムシフトを無料で保存する方法
ニコニコ生放送のタイムシフトを無料で保存する方法
tani-page
 
Slack + Hubot でお前の一番好きな二次元嫁キャラと一緒に仕事をする
Slack + Hubot でお前の一番好きな二次元嫁キャラと一緒に仕事をするSlack + Hubot でお前の一番好きな二次元嫁キャラと一緒に仕事をする
Slack + Hubot でお前の一番好きな二次元嫁キャラと一緒に仕事をする
sairoutine
 
LT: 今日帰ってすぐに始められるPython #nds45
LT: 今日帰ってすぐに始められるPython #nds45LT: 今日帰ってすぐに始められるPython #nds45
LT: 今日帰ってすぐに始められるPython #nds45
civic Sasaki
 

Was ist angesagt? (20)

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

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

Windowsにpythonをインストールしてみよう
WindowsにpythonをインストールしてみようWindowsにpythonをインストールしてみよう
Windowsにpythonをインストールしてみよう
Kenji NAKAGAKI
 
今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋
Takuya Ueda
 

Ähnlich wie Vimとctagsでコードリーディング 公開用 (20)

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

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