Vue.jsのいい感じなctagを生成する
定義場所に直接ジャンプできる便利なctagをVue.jsで使うときにちょっと困りました。
Vue.jsのコンポーネント名のctagが自動では生成されない
ctagを生成するときはctags -R --extra=+fq
ってやるとファイル名のctagを生成してくれて便利なのですが、このタグには拡張子が付いています。
生成されるctagは例えば
App.vue src/App.vue 1;" F
って感じです。これだとコード中にApp
があってもジャンプできません。
App src/App.vue 1;" F
ですので拡張子.vueを含めない上のような形式にして欲しいのです。
しかしctags
コマンド単体では拡張子無しのタグを生成する方法が見つからなかったので、vimの保存時にsedでtagsファイルを置換するようにしました。
" ~/.vimrc function! _updateCtags() let tagsFile = getcwd() . '/tags' exec ":silent ! ctags -R --extra=+fq && sed -i -e 's/^\\([a-zA-Z0-9]*\\)\\.vue/\\1/' " . tagsFile " *.vueファイルの.vueの部分をsedで取り除く endfunction command! UpdateCtags call _updateCtags() autocmd BufWritePost * :UpdateCtags
こんなコードを.vimrcに置けばvimの保存時にファイル名から生成したVueコンポーネントの名前のタグを自動生成できます。
(コンポーネントのnameオプションで別の名前を指定されると無理。また別の正規表現で抜き出す必要がある)
~/.ctags
はこれをちょっといじって使っています。