Python のソースを読むのにタグジャンプ機能を利用する
vi(vim) で Python のソースを読むのに ctags を使ってみました。調べていると、別途、ptags.py と言うものもあり、それを用いてもタグファイルを作成してくれるようです。
basic Tip #1188: Use ptags.py to generate tags file for python によると、Python 2.3 以上で使用できます。ptags.py は python-tools パッケージに含まれています。
yum を使って python-tools と ctags をインストールします。
$ sudo yum install python-tools ctags ~~~ snip ~~~ Running Transaction Installing : python-tools [1/2] Installing : ctags
以下のように ptags.py の引数にファイル名を指定すると tags ファイルが作成されます。おそらく ptags.py は ctags が Python に対応していなかった過去の名残りかな?と思います。現在は ctags でもタグファイルを作成することができます。
$ /usr/lib/python2.5/Tools/scripts/ptags.py *.py
又は、
$ ctags *.py
ptags.py と ctags で作成した tags ファイルを比較してみました。ctags の tags ファイルの方がサイズが大きいです。
$ ls -l tags* -rw-rw-r-- 1 xxx xxx 33543 2008-09-03 18:31 tags.ctags -rw-rw-r-- 1 xxx xxx 18708 2008-09-03 18:32 tags.ptags $ head tags.ptags tags.ctags ==> tags.ptags <== CacheProgressCallback output.py /^class CacheProgressCallback:/ CheckFailedSignal yum-updatesd.py /^ def CheckFailedSignal(/ CheckNow yum-updatesd.py /^ def CheckNow(/ CheckUpdateCommand yumcommands.py /^class CheckUpdateCommand(/ CleanCommand yumcommands.py /^class CleanCommand(/ CliError cli.py /^class CliError(/ DbusUpdateEmitter yum-updatesd.py /^class DbusUpdateEmitter(/ DepListCommand yumcommands.py /^class DepListCommand(/ DepSolveProgressCallBack output.py /^class DepSolveProgressCallBack:/ EmailUpdateEmitter yum-updatesd.py /^class EmailUpdateEmitter(/ ==> tags.ctags <== !_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;" to lines/ !_TAG_FILE_SORTED 1 /0=unsorted, 1=sorted, 2=foldcase/ !_TAG_PROGRAM_AUTHOR Darren Hiebert /dhiebert@users.sourceforge.net/ !_TAG_PROGRAM_NAME Exuberant Ctags // !_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/ !_TAG_PROGRAM_VERSION 5.6 // CacheProgressCallback output.py /^class CacheProgressCallback:$/;" c CheckFailedSignal yum-updatesd.py /^ def CheckFailedSignal(self, message):$/;" m class:YumDbusInterface CheckNow yum-updatesd.py /^ def CheckNow(self):$/;" m class:YumDbusListener CheckUpdateCommand yumcommands.py /^class CheckUpdateCommand(YumCommand):$/;" c
どちらが良いとか、何が違うとかがよく分からないので、取り合えず ctags を使用することにします(^ ^;;
カレントディレクトリ配下(サブディレクトリも含む)の 全ての .py ファイルからタグファイルを作成する $ find . -type f -name "*.py" -exec ctags -a {} \; 上記に加えて、特定ライブラリも対象に含めてタグファイルを作成する $ find . /usr/lib/python2.5/site-packages/rpm* -type f -name "*.py" -exec ctags -a {} \;
vi(vim) エディタ上での基本操作は以下の通りです。詳細は Tip #94: Questions & Answers about using tags with Vim からリンクを辿ればありそうです。まぁ、ぼちぼちと(- -#
:ta tag タグを検索する Ctrl-] カーソル下のタグを検索する(ヒットすればジャンプ) Ctrl-T タグジャンプする前の位置へ戻る
さらに taglist.vim : Source code browser (supports C/C++, java, perl, python, tcl, sql, php, etc) に taglist.vim というプラグインがあります。せっかくなのでこれもインストールして使ってみます。
インストール方法: 1. taglist_45.zip をダウンロード 2. vim の環境設定 $ vi ~/.vimrc filetype on を追加 $ cd ~/.vim $ unzip /tmp/taglist_45.zip plugin/taglist.vim - プラグインの本体 doc/taglist.txt - ドキュメント(ヘルプ)ファイル 3. 基本操作 :TlistToggle 左側にタグリストメニューが表示され F1 でヘルプが見れます
以下のようなイメージです。
リファレンス:
Vim Taglist Plugin 本家サイト