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これをちょっといじって使っています。