tagsファイルを作成する「auto-ctags.vim」作った

auto-ctags.vim

https://github.com/soramugi/auto-ctags.vim

経緯

vimでタグジャンプした時は感動したもので、ぎょーむのコーディングでドキュメントが無くてもタグジャンプとgrepできればまぁなんとかなるでしょってなもんでやっていたのですが。

タグジャンプしようとした時にtagsのフォーマットが崩れていてジャンプする事が出来なかったり。tagsが複数検出されて数カ所のtagsリストが表示されているけども場所は同じと、同じようなtagsファイルが複数作られていたりと軽いブレーキがかかる事が気にかかるようになってきてました。

以前までの環境ではtags作成のvimプラグイン、vim-tagsを使用してtagsファイルを作成するようにしていました。
保存すればtagsが作成されるというプラギン。

なにか設定が足りないのかなとプラグインの記述を読んでいるとなんとなく使いづらいかなと思われるところが何点か。

  1. デフォルトのtags作成場所がバージョン管理ディレクトリ中
  2. 指定されたパスにtagsが作成されていないと自動作成はされない。
  3. ctagsプロセスが実行中の時にさらに実行されるとtagsファイルが壊れる場合の回避がされてない
  4. 作成されているtagsを作り直すのがvimからは出来ない。

プルリク送ろうとしたんだけどデフォルト変えたりするのやだなぁとか、issue見たら質問とかばっかだし、あとソースコード読みzr、どうせならvimのテストも試してみたいなー

とか考えてたら面倒くさくなって自分で作ってしまう事に。

なのでREADMEにPolisyとか書いてます。いちいちissueで「こんな変更したいけどいい???」とか確認とるの面倒だし(書いてくれれば全然答えますが)、こう特定の相手に向かって自分の意見を伝えるってのがどうも苦手で誰かよくわかんない空間にとりあえず投げて立ち去るとかしてたい人です。とりあえず書いといて意味汲み取ってくれたらラッキーってなものです。
直接的な関係よりも間接的な関係が丁度良いと感じる感じかなと思う感じで感じてます。

「とりあえずプルリク送ろう」➡「プルリクもらった!なんかイケて無いけど折角だしマージしよう(なんか自分が作りたいものでは無くなったような。。)」
てのがあると本当に悲しいのでなんとかすべき。そんなのあるのか解んないけど、可能性はある気もする。他人の意見を尊重する日本人ならではとかそんなイメージです。頑張れ日本人!。はい頑張ります!

どうでもいいですね。

使用方法

ちなみに「auto-ctags.vim」とか書いてますがデフォルトではautoでは無いです。言葉って本当に難しいですね。

インストール

まずはctagsをインストールしておきます。

mac

brew install ctags

debian

sudo apt-get install exuberant-ctags

redhat系はなんか適当に。
5.8とか新しめのctagsを入れる事をお勧めします。
windowsは実行確認できてないのでわからんです。誰か人柱ー

そしてお使いのパッケージ管理プラグインとかでいれます。自分はNeoBundle

NeoBundle 'soramugi/auto-ctags.vim'

実行

おもむろにtagsを作成したいカレントディレクトリに移動してvimを開いて以下のコマンドを打ち込めば

:Ctags

カレントディレクトリ直下にtagsファイルさんが作成されているます。
`:Ctags`コマンドは作成されていたtagsを削除してから作り直します。

設定

auto-ctags.vimのauto感を演出したい時には以下。ファイルを保存された時にtagsが作成されます。

let g:auto_ctags = 1

tagsを作成するディレクトリを指定したい時には以下。最初に一致したパターンのディレクトリに格納されます。作成されたtagsは別途読み取るような設定書いておいてください。

let g:auto_ctags_directory_list = ['.git', '.svn']

あとはctagsのオプション指定だったり

let g:auto_ctags_tags_args = '--tag-relative --recurse --sort=yes'

開いてるファイルタイプ専用のtagsを作ったりできます。`.rb`、vimでのファイルタイプが`ruby`を開いてる時には`ruby.tags`が作成されます。作成されたtagsは別途読み取るような設定書いておいてください。

let g:auto_ctags_filetype_mode = 1

解説

ざっと説明はこんなものです。
内部的には`:Ctags`を実行すると

  1. tags削除
  2. tags.lockが無いか確認
  3. tags.lock作成
  4. ctagsコマンド実行
  5. tags.lock削除

て流れです。

テスト

あとは今回のvimプラグインにはtravis-ciのテストを実行させていて、テストフレームワークにはvimrunnerを使っています。
rubyrspec形式でテストが記述できるのですが、ユニットテストというよりも機能テストな感じでざっくばらんに「この設定で期待した結果になってるか」とか確認するだけで良い感じですね。
ローカルでパスしたテストがtravis-ciではパスしなかったりとかありますがおおむね良好。
vimのテストフレームワークとかあんまり定着してないので、開発に参加して定着させるのも楽しそう

まとめ

tagsって面倒くさいじゃないですか。
楽したいじゃないですか。
楽しましょう。

https://github.com/soramugi/auto-ctags.vim