SlideShare uma empresa Scribd logo
1 de 16
Baixar para ler offline
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

Mais conteúdo relacionado

Mais procurados

ニコニコ生放送のタイムシフトを無料で保存する方法
ニコニコ生放送のタイムシフトを無料で保存する方法ニコニコ生放送のタイムシフトを無料で保存する方法
ニコニコ生放送のタイムシフトを無料で保存する方法tani-page
 
ニコニコ生放送のタイムシフトを無料で保存する方法
ニコニコ生放送のタイムシフトを無料で保存する方法ニコニコ生放送のタイムシフトを無料で保存する方法
ニコニコ生放送のタイムシフトを無料で保存する方法tani-page
 
Pynyumon03 LT
Pynyumon03 LTPynyumon03 LT
Pynyumon03 LTdrillan
 
Hubotで遊ぶ
Hubotで遊ぶHubotで遊ぶ
Hubotで遊ぶtreby
 
F*言語ワークショップ
F*言語ワークショップF*言語ワークショップ
F*言語ワークショップTakuKitamura1
 
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-boropon
 
Slack + Hubot でお前の一番好きな二次元嫁キャラと一緒に仕事をする
Slack + Hubot でお前の一番好きな二次元嫁キャラと一緒に仕事をするSlack + Hubot でお前の一番好きな二次元嫁キャラと一緒に仕事をする
Slack + Hubot でお前の一番好きな二次元嫁キャラと一緒に仕事をするsairoutine
 
SECCON2014 crypt200
SECCON2014 crypt200SECCON2014 crypt200
SECCON2014 crypt200boropon
 
オープンソースカンファレンス名古屋「高蔵寺SE勉強会」
オープンソースカンファレンス名古屋「高蔵寺SE勉強会」オープンソースカンファレンス名古屋「高蔵寺SE勉強会」
オープンソースカンファレンス名古屋「高蔵寺SE勉強会」mick
 
プロ生ちゃんbotを作ろう!
プロ生ちゃんbotを作ろう!プロ生ちゃんbotを作ろう!
プロ生ちゃんbotを作ろう!treby
 
Pythonで書くじゃんね!
Pythonで書くじゃんね!Pythonで書くじゃんね!
Pythonで書くじゃんね!Kiminori Kato
 
Goとtest coverage
Goとtest coverageGoとtest coverage
Goとtest coveragenakaji-s
 
libpgenでパケット操作
libpgenでパケット操作libpgenでパケット操作
libpgenでパケット操作slankdev
 
俺とDockerとtDiaryとkubernetes
俺とDockerとtDiaryとkubernetes俺とDockerとtDiaryとkubernetes
俺とDockerとtDiaryとkubernetesMasayuki KaToH
 
PyLadies Tokyo 二周年記念パーティ LT
PyLadies Tokyo 二周年記念パーティ LTPyLadies Tokyo 二周年記念パーティ LT
PyLadies Tokyo 二周年記念パーティ LTTetsuya Morimoto
 
仕事でも Groovy を使おう!
仕事でも Groovy を使おう!仕事でも Groovy を使おう!
仕事でも Groovy を使おう!Oda Shinsuke
 
LT: 今日帰ってすぐに始められるPython #nds45
LT: 今日帰ってすぐに始められるPython #nds45LT: 今日帰ってすぐに始められるPython #nds45
LT: 今日帰ってすぐに始められるPython #nds45civic Sasaki
 
cs-11. Python の条件分岐と繰り返し,ステップ実行
cs-11. Python の条件分岐と繰り返し,ステップ実行cs-11. Python の条件分岐と繰り返し,ステップ実行
cs-11. Python の条件分岐と繰り返し,ステップ実行kunihikokaneko1
 
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版
PythonとRによるデータ分析環境の構築と機械学習によるデータ認識 第3版Katsuhiro Morishita
 

Mais procurados (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版
 

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

KMC Font Project 3 - FontForgeで欧文書体製作
KMC Font Project 3 - FontForgeで欧文書体製作KMC Font Project 3 - FontForgeで欧文書体製作
KMC Font Project 3 - FontForgeで欧文書体製作k maztani
 
20130824 Lightweight Language "Go" @LL matsuri
20130824 Lightweight Language "Go" @LL matsuri20130824 Lightweight Language "Go" @LL matsuri
20130824 Lightweight Language "Go" @LL matsuriYoshifumi Yamaguchi
 
Windowsにpythonをインストールしてみよう
WindowsにpythonをインストールしてみようWindowsにpythonをインストールしてみよう
WindowsにpythonをインストールしてみようKenji NAKAGAKI
 
ML system design_pattern
ML system design_patternML system design_pattern
ML system design_patternyusuke shibui
 
Python界隈の翻訳プロジェクト
Python界隈の翻訳プロジェクトPython界隈の翻訳プロジェクト
Python界隈の翻訳プロジェクトTetsuya Morimoto
 
やさしいGitの内部構造 - yapcasia2013
やさしいGitの内部構造 - yapcasia2013やさしいGitの内部構造 - yapcasia2013
やさしいGitの内部構造 - yapcasia2013DQNEO
 
Python & PyConJP 2014 Report
Python & PyConJP 2014 ReportPython & PyConJP 2014 Report
Python & PyConJP 2014 Reportgree_tech
 
211120 他人の書いたPythonスクリプトをステップ実行で理解する
211120 他人の書いたPythonスクリプトをステップ実行で理解する211120 他人の書いたPythonスクリプトをステップ実行で理解する
211120 他人の書いたPythonスクリプトをステップ実行で理解するTakuya Nishimoto
 
Django から各種チャットツールに通知するライブラリを作った話
Django から各種チャットツールに通知するライブラリを作った話Django から各種チャットツールに通知するライブラリを作った話
Django から各種チャットツールに通知するライブラリを作った話Yusuke Miyazaki
 
密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境密着!わたしのコンソールアプリ開発環境
密着!わたしのコンソールアプリ開発環境Fumihito Yokoyama
 
CPythonを読もう
CPythonを読もうCPythonを読もう
CPythonを読もうAkira Nonaka
 
今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋今日から始めるGopher - スタートGo #0 @GDG名古屋
今日から始めるGopher - スタートGo #0 @GDG名古屋Takuya Ueda
 
Django で始める PyCharm 入門
Django で始める PyCharm 入門Django で始める PyCharm 入門
Django で始める PyCharm 入門kashew_nuts
 
Koi::Bana〜恋に落ちたエンジニア〜
Koi::Bana〜恋に落ちたエンジニア〜Koi::Bana〜恋に落ちたエンジニア〜
Koi::Bana〜恋に落ちたエンジニア〜Munenori Sugimura
 
Emscriptenと不思議のダンジョン
Emscriptenと不思議のダンジョンEmscriptenと不思議のダンジョン
Emscriptenと不思議のダンジョン兎 伊藤
 

Semelhante a 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でコードリーディング 公開用