概要
- JRuby環境下のrubyソースコードをvimで開くのが遅い。
- vimrcで
let g:ruby_path = ""
またはlet b:ruby_version = "2.3.1"
などと記述することで解消する。 - しかし、バッドノウハウの類なのでより良い解決方法求む。
現象
rbenvでJRuby環境にあるソースコードをvimで開くと2,3秒かかった(グローバルにJRubyを導入して使っている場合も同様)。
導入した何らかのプラグインが影響しているのではないかと考え、まずvimrcやpluginを取り払って起動してみたが、やはり遅い。
もう一歩踏み込んで、--noplugin
オプションを付けて起動したところ、瞬時に起動した。
原因
ということで、原因は標準に付属しているpluginにあると目星が付いた。
/vim74/ftplugin/ruby.vimを調べたところ、rubyコードを読み込むときに有効になっているrubyを起動していることが分かった。
(ver.7.4で調べたが、コードを見た感じver.8.0でもほぼ同様だと思われる)
JRubyはJVMを起動するのに時間がかかるので、とにかく起動が遅い。
さらっと読み流したところ、rubyの標準ライブラリのパスを調べて、そのパスにあるタグファイルをtagsに追加することを目的としているようだ。
対策
次のいずれかで、ひとまず問題は解消される。
- /usr/share/vim/vim74/ftplugin/ruby.vimを撤去
- ただし、標準のプラグインなので、いろいろな影響が出ると思われる。
- また、便利な機能も一緒に無効になってしまう。
- もちろん、ruby標準ライブラリへのタグジャンプはできなくなる。
- vimrcに
let g:ruby_path = ""
と記述- ruby標準ライブラリへのタグジャンプはできなくなる。
- (このパスで指定した)rubyに依存した機能が効かなくなるはず。
- 標準以外のプラグインでも、このグローバル変数に依存したものが 影響を受ける可能性あり。
- vimrcにCRubyのバージョン、例えば
let b:ruby_version = "2.3.1"
と記述- "2.3.1"と書いた部分には、自身の環境に導入されているJRuby以外の適当なバージョンを指定する。
- ruby標準ライブラリへのタグジャンプは指定したバージョンのコードへのジャンプとなるはずである。
- 邪悪な感じの対処なので、いろいろ危ういかも。
1はやり過ぎなので、基本的には2か3の対応となる。
課題
ひとまず、起動が遅い問題自体は解決したが、あまり正当な方法とは言えない。
良い解決方法をお持ちの方は、教えていただけると助かります。