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

おじいちゃんの家にあるようなペン

ノートに書き出す習慣はあったのだけれど、ノートを持ち運ぶ習慣は無かったので持ち運んでみたら面白いのではないかという理由でモレスキンを買ってお店で見かけたシールとかポストカードとか貼付けるの結構楽しくてペンも新しいのにしてみようとAmazonで買ったのがおじいちゃんの家にあるようなボールペンだった日記。

f:id:soramugi:20131118221745j:plain

f:id:soramugi:20131118221531j:plain

妙に軽くてカスカスな感じの音がするのだがスラスラかけてよい。
ボールペンは水性の方が好き。

んで筆箱のペン達

f:id:soramugi:20131118221547j:plain

f:id:soramugi:20131118221731j:plain

左から黒の水性ペン、ぺんてるの筆ペン、黒油性ボールペン、オレンジ油性ボールペン、シャーペン群、蛍光ペン

筆記用具とかなぜかわくわくする。

最近の歯ブラシ事情

最近買った歯ブラシが良かった。
f:id:soramugi:20131113095004j:plain

使っていた歯ブラシの毛先が開いてきて買い替える必要性を感じていたのだけれど、普段の導線に薬局が含まれていないのでいつも忘れていた。
駅前の帰る道を少しそれれば薬局の一つもあるだろうにいつも忘れる。薬局に入りさえすれば思い出すだろうけども薬局に寄る必要性が無いのだからしょうがない。これは薬局の責任もある事を忘れないでいただきたい。

しかし僕の歯ブラシのために薬局がとてもお得な商品を販売したり、新種のウイルスをバラまいてワクチンの独占販売をするとは思えないので、自分でなんとかする必要があった。
解決策としては思い出した時にAmazonで注文すること。さすが僕らのAmazonは身近にいるだけの事はある。iPhoneを開けばいつでも君に会える。「ねぇねぇAmazonさん、今度はこれが欲しいの」「よしわかった、リストは作れるようにしておくから後から自分で買いなさい。たまに他の人からも買ってもらえるようにはしておくから」

買ったのは以下の商品。

GUM デンタルブラシ #528 コンパクト ふつう

GUM デンタルブラシ #528 コンパクト ふつう

歯ブラシの毛先が広がる問題に直面して、なおかつ買い替えるのも面倒臭い人が大多数ならしく、まとめて何本入り〜とかが上位に食い込んでいた。欲しいのは一本の歯ブラシなのでいっちゃん人気の一本の歯ブラシにしてみた。

使ってみたら持ち手が結構でかかった。魚肉ソーセージぐらいはないけどチーズかまぼこぐらいの太さはありそうなぐらいではあった。チーズかまぼこよりも太いかもしれない。
ところでオレンジ色の歯ブラシが来ると思っていたけど紫色だった。どちらかといえば紫の方が好きな色なので問題はない。というか色とかどうでも良かった。

毛先はぶっとい点の毛先でがしがし引っ掻いて磨くらしい。
f:id:soramugi:20131113095046j:plain
毛先が密集して面になるより毛先同士を離れさせて点になるようにしたのか。ふむふむ〜

Amazonのレビューでは歯以外の部分を磨いて試したらしいがそこまでして試したくはなくて、僕はただ歯を磨きたいだけだった。磨いてみると歯茎と歯の広がりをいつもより強く感じましたね。
磨けてるかどうかというよりも歯茎と歯の間の広がりをいつもより強く感じましたね。

広がりを感じるということは間に侵入してきたものがいた訳で、それは紛れも無い歯ブラシさんのお仕事の結果だった訳ですね。

歯ブラシさんの柄が太くて力が入れやすいのと、毛先さんの点で磨く構造のおかげでより「磨いてる感」を強く得られました。よい歯ブラシさんをお迎えする事が出来ました。

ところで洗顔とかした時に化粧水をつけて肌を引き締める必要があると思うんだけど、口の中ってそういうのいらないのかね。毛穴と違って歯茎とか歯の隙間とか間が開いても歯茎さんの力でよしなにしてくれるのかね、歯茎のマッサージを歯ブラシさんですればたくましい歯茎が出来上がって問題ないとかですかね。毛穴と比べると大きさ違いすぎるから比較にはならないのかもだけど。