LoginSignup
3
4

More than 3 years have passed since last update.

JRuby で開発している時に vim を開くと遅いよねという話

Last updated at Posted at 2016-04-10

vim-bundler, vim-rails, vim-rake, vim-ruby プラグインなどで ruby コマンドを実行していて、.ruby-version に jruby が指定されていると、jruby が実行されることになるので遅い。jruby の立ち上がりに3秒ぐらいかかる

該当箇所

vim-bundler

vim-bundler/plugin/bundler.vim
337:        let gem_paths = split(system(prefix.'ruby -rubygems -e '.s:shellesc('print Gem.path.join(%(;))')), ';')
340:      let abi_version = system('ruby -rrbconfig -e '.s:shellesc('print RbConfig::CONFIG["ruby_version"]'))

vim-rails

vim-rails/autoload/rails.vim
1838:        call system("ruby -e 'Process.kill(:TERM,".pid.")'")
1841:      call system("ruby -e 'Process.kill(9,".pid.")'")
4043:  let json = system('ruby -e '.s:rquote('require %{yaml}; require %{json}; File.open(%q{'.a:file.'}) {|f| puts JSON.generate(YAML::load(f))}'))

vim-rake

vim-rake/plugin/rake.vim
217:      let self._ruby_include_path = system('ruby -rrbconfig -e "print RbConfig::CONFIG[\"rubyhdrdir\"] || RbConfig::CONFIG[\"topdir\"]"')

vim-ruby

78:    let path_check = prefix.'ruby -e "' . code . '"'
80:    let path_check = prefix."ruby -e '" . code . "'"

対応方法

(0) vimrc で let g:ruby_path = "" のように cruby のパスを指定する

これは、この変数も見てくれないプラグインもあってダメだった。

(1) .ruby-version を変える

rbenv shell で cruby を指定してから vim を開けば良い。

いや、それはそうなんだが、辛い。

(2) vim プラグインの ruby パスを書き換える

(0) で述べたように、変数でパスを変えられなさそうなので、直接プラグインを改変する。
/usr/bin/ruby とシステム ruby を使うように書き換えてしまえば速くなる。

これは辛い。

(3) vim 起動時に PATH を変える

/usr/bin を優先にして vim を起動すれば、システム ruby が使われるので速くなる。

env PATH=/usr/bin:$PATH vim foo.rb

のように。alias しておくとこう。

alias vim='env PATH=/usr/bin:$PATH \vim'

まとめ

とりあえず (3) でやってるけど、もっと上手い方法あれば welcome

3
4
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4