はじめに

.vimrc たまにいじりだすと止まらなくなりますよね。テスト勉強中に掃除しだしたら止まらない感覚と似てます🤔

最近だと、coc.nvimに非常にお世話になっています。VSCodeのようなLSP(Language Server Protocol)のサポートで、ほとんどの言語で強力な補完を実現してくれます。この補完は本当に感動モノなんですが、定義元ジャンプや参照元ジャンプ、簡易リファレンスも参照できて、超すごいです。以前はCtagsでタグを生成しジャンプするスタンダードな方法で開発していましたが、coc.nvimだとより高速です。

最近はSwiftでの開発でXCodeとXVim2を使っていますが、標準のジャンプ機能がかなり優秀ですね。coc.nvimはRubyファイルの場合だとジャンプが機能してくれず、それはなかなかに困っていました。

Rubyの場合、以前Ctagsで上手く動作することは確認済みなので、今回はファイルタイプに応じてジャンプのコマンドを使い分ける設定をしました。


Ctagsのインストール

Ctagsは2種類あります。

アクセスしていただくとサイトデザインからも一目瞭然なんですが、前者はもう10年以上メンテナンスされていません。逆に後者は本記事執筆時点で最終更新から3日なので、よっぽどの理由がない限り後者の universal-ctags を選択するとよいでしょう。

$ brew install --HEAD universal-ctags/universal-ctags/universal-ctags

タグの生成

$ ctags -R .

# Rubyファイルに限定する場合
$ ctags -R . --languages=Ruby

調査中にこちらの記事でたまたま見つけたのですが、以下のコマンド実行後にタグ生成すればgemの内部コードへのパスを設定し、ジャンプできるようになります。いちいちブラウザで調べる必要がなくなったので嬉しい、、

$ bundle install --path=vendor/bundle

設定

coc.nvimに関しては、ドキュメントに具体的な設定が載っているので参考にするとよさそうです。ジャンプのコマンドはctagsのもので慣れてしまっているので、合わせる形で変更しました

# dein.toml

[[plugins]]
repo = 'neoclide/coc.nvim'
rev = 'release'
hook_add = '''
  let g:coc_global_extensions = [好みの拡張]
  nmap <silent> <C-]> <Plug>(coc-definition)
  nmap <silent> <C-t> <Plug>(coc-references)
'''

# .vimrc

set tags=./tags;
autocmd filetype ruby nnoremap <C-]> g<C-]>

定義元ジャンプは Ctrl-] 、ジャンプ元へ戻る場合は Ctrl-o 、参照元ジャンプは Ctrl-t です。

これでRubyファイルの場合はctags、その他のファイルだとcoc.nvimのジャンプが実行されるようになりました🎉