Rubyコーディングあれこれ (初めての方むけ: Linux/vim tagsファイルをアプリで使う)
本地震の予測マップ・プログラムはRubyで書かれていますが、以前から初めての方むけにコーディングテクのようなモノをまとめておければ、と考えていました。 そこで思い付くままにまとめてみよう、と考えております。
今回は、vimのtagsファイルジャンプをアプリで使う場合のやり方です。 (短くまとめます)
私はアプリで出てくる中間状態のリスト形式(要するにデータテーブル)を外部ファイルに出して、処理結果のサマリー・メッセージからこの外部リスト形式にtagsファイルジャンプさせて参照していました。 サマリーリストには色々な情報が出て来ますが、サマリーとしてまとめられている(短い)訳で詳細を見ようとすると別の詳細ファイルに飛ばす必要があって、これをtagsファイルジャンプで行う訳です。
階層化がいくらでも可能で、下位レベルのファイルにジャンプしてゆけます。 (詳細リストの階層化が可能、という事です)
tagsの変数はグローバルに配列で持ちます。 いかなる場所からも書込み出来るようにです。 そして header を設定します。 フォーマットは以下の通り。
$tag = Array.new()
$tag << :"!_TAG_FILE_FORMAT 2 /extended format; --format=1 will not append ;\" to $lines/"
$tag << :"!_TAG_FILE_SORTED 0 /0=unsorted, 1=sorted, 2=foldcase/"
$tag << :"!_TAG_PROGRAM_AUTHOR Darren Hiebert /dhiebert@users.sourceforge.net/"
$tag << :"!_TAG_PROGRAM_NAME Exuberant Ctags //"
$tag << :"!_TAG_PROGRAM_URL http://ctags.sourceforge.net /official site/"
$tag << :"!_TAG_PROGRAM_VERSION 5.9~svn20110310 //"
例えば、次に以下のストリングをアタッチします。
my name is Sugiura\t/home/.../file\tラインアドレス (ファイルは絶対パス、アドレスは1スタート)
my name is Sugiuraはtagsのインスタンス名(ラベル名)で、これは英数字とアンダーバーとスペースで、これを特殊文字で囲んだものをサマリーリストに出します。 例えば:
[my name is Sugiura] として、
/home/.../fileの10行目に"my name is Sugiura"の詳細リストを入れておきますと、
my name is Sugiura\t/home/.../file\t10 がtasgファイルへアッタチするラインとなります。
ソーティングの必要はありません(このヘッダであれば)。
tagsファイルはdir内にひとつしか置けませんで、ファイル名"tags"固定でカレントに置きます。
実行は必ずリダイレクトさせ、1>logといった感じでlogに実行リストを出します。
実行後、vimでlogを開き、サマリーリストに出ている[my name is Sugiura]の所にカーソルを当てて:
Ctrl] を押すと、fleの10行目にジャンプします。
戻る時は:
CtrlT です。
ジャンプ先のfileはカレントである必要はなく、どこにでも置けました。 (絶対パスで指定している)
tagsファイルはカレントにおいて1>logを何回も実行する訳で、私はtagsファイルを毎回クリアせずに追加書き込みで使っていました。 追加書き込みといっても所謂追加("a")ではなく、最新の結果をヘッダ直後に入れるラストイン・ファーストアウトにさせます。 こうすると最新の実行結果の参照が最初に行われます。 同じtagsのライン情報がいくら在っても最初のマッチでジャンプします。
グラフィックを一切使わずvimのみでトラバースさせてゆく訳で、それはそれで面白い世界でした。 ですが、恐らく言語処理アプリ向きなのでしょう、今の地震の予測マップでは全く必要としませんで、別世界です。
以上です。