どうもてぃ。
最近vimのneocomplete
とneocomplcache
のサポートが終わってることを知り、ちょうどいい機会だったのでlspに移行しようとした際にハマったので備忘録として。
lspの導入
lspとは…という説明はいろんなところでなされてるためここでは割愛します。
極ありふれた表現で簡単に表現すれば補完できるすごいやつです。凄いやつは使いたくなりますよね、vimmerならば。
vimrc
ずっと整理したいtomlにできないまま、また一年が経過しそうになってますが、こんな感じです。
" vim lsp call dein#add('prabirshrestha/async.vim') call dein#add('prabirshrestha/asyncomplete.vim') call dein#add('prabirshrestha/vim-lsp') call dein#add('mattn/vim-lsp-settings') call dein#add('prabirshrestha/asyncomplete-lsp.vim') if executable('solargraph') " gem install solargraph au User lsp_setup call lsp#register_server({ \ 'name': 'solargraph', \ 'cmd': {server_info->[&shell, &shellcmdflag, 'solargraph stdio']}, \ 'initialization_options': {"diagnostics": "true"}, \ 'whitelist': ['ruby'], \ }) endif
公式通りに必要なものをセットで入れてます。
まだ導入段階で解決できてないところ多いんですが、asyncomplete
入れてるのに自動補完されないんですよね…それはまた今度調査します。
Rubyではlsp用のgem solargraph
を使用するのでとりあえずローカルにぶち込みます。
$ gem install solargraph
とりあえず準備OK。
適当にRailsプロジェクトのファイルを開く
app/controllers/users_controller.rb
を開いたとしましょう。
Please do :LspInstallServer to enable Language Server ~~~
と出てくるので:LspInstallServer
でlspの設定。対象のgem等がインストールされていくはずです。
が、安定のnokogiriさんに阻まれました。
/home/motty/.local/share/vim-lsp-settings/servers/solargraph/vendor/bundle/ruby/2.6.0/gems/nokogiri-1.10.10/ext/nokogiri/tmp/x86_64-pc-linux-gnu/ports/libxml2/2.9.10/libxml2-2.9.10/libtool: File name too long Makefile:1015: recipe for target 'install-libLTLIBRARIES' failed make[3]: *** [install-libLTLIBRARIES] Error 126 make[3]: ディレクトリ '/home/motty/.local/share/vim-lsp-settings/servers/solargraph/vendor/bundle/ruby/2.6.0/gems/nokogiri-1.10.10/ext/nokogiri/tmp/x86_64-pc-linux-gnu/ports/libxml2/2.9.10/libxml2-2.9.10' から出ます Makefile:1792: recipe for target 'install-am' failed make[2]: *** [install-am] Error 2 make[2]: ディレクトリ '/home/motty/.local/share/vim-lsp-settings/servers/solargraph/vendor/bundle/ruby/2.6.0/gems/nokogiri-1.10.10/ext/nokogiri/tmp/x86_64-pc-linux-gnu/ports/libxml2/2.9.10/libxml2-2.9.10' から出ます Makefile:1479: recipe for target 'install-recursive' failed make[1]: *** [install-recursive] Error 1 make[1]: ディレクトリ '/home/motty/.local/share/vim-lsp-settings/servers/solargraph/vendor/bundle/ruby/2.6.0/gems/nokogiri-1.10.10/ext/nokogiri/tmp/x86_64-pc-linux-gnu/ports/libxml2/2.9.10/libxml2-2.9.10' から出ます Makefile:1786: recipe for target 'install' failed make: *** [install] Error 2 ======================================================================== *** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may need configuration options. Provided configuration options: --with-opt-dir --without-opt-dir --with-opt-include --without-opt-include=${opt-dir}/include --with-opt-lib --without-opt-lib=${opt-dir}/lib --with-make-prog --without-make-prog --srcdir=. --curdir --ruby=/home/motty/.asdf/installs/ruby/2.6.3/bin/$(RUBY_BASE_NAME) --help --clean --use-system-libraries --enable-static --disable-static --with-zlib-dir --without-zlib-dir --with-zlib-include --without-zlib-include=${zlib-dir}/include --with-zlib-lib --without-zlib-lib=${zlib-dir}/lib --enable-cross-build --disable-cross-build /home/motty/.local/share/vim-lsp-settings/servers/solargraph/vendor/bundle/ruby/2.6.0/gems/mini_portile2-2.4.0/lib/mini_portile2/mini_portile.rb:402:in `block in execute': Failed to complete install task (RuntimeError) from /home/motty/.local/share/vim-lsp-settings/servers/solargraph/vendor/bundle/ruby/2.6.0/gems/mini_portile2-2.4.0/lib/mini_portile2/mini_portile.rb:373:in `chdir' from /home/motty/.local/share/vim-lsp-settings/servers/solargraph/vendor/bundle/ruby/2.6.0/gems/mini_portile2-2.4.0/lib/mini_portile2/mini_portile.rb:373:in `execute' from /home/motty/.local/share/vim-lsp-settings/servers/solargraph/vendor/bundle/ruby/2.6.0/gems/mini_portile2-2.4.0/lib/mini_portile2/mini_portile.rb:120:in `install' from /home/motty/.local/share/vim-lsp-settings/servers/solargraph/vendor/bundle/ruby/2.6.0/gems/mini_portile2-2.4.0/lib/mini_portile2/mini_portile.rb:155:in `cook' from extconf.rb:365:in `block (2 levels) in process_recipe' from extconf.rb:257:in `block in chdir_for_build' from extconf.rb:256:in `chdir' from extconf.rb:256:in `chdir_for_build' from extconf.rb:364:in `block in process_recipe' from extconf.rb:262:in `tap' from extconf.rb:262:in `process_recipe' from extconf.rb:557:in `<main>' To see why this extension failed to compile, please check the mkmf.log which can be found here: /home/motty/.local/share/vim-lsp-settings/servers/solargraph/vendor/bundle/ruby/2.6.0/extensions/x86_64-linux/2.6.0/nokogiri-1.10.10/mkmf.log extconf failed, exit code 1 Gem files will remain installed in /home/motty/.local/share/vim-lsp-settings/servers/solargraph/vendor/bundle/ruby/2.6.0/gems/nokogiri-1.10.10 for inspection. Results logged to /home/motty/.local/share/vim-lsp-settings/servers/solargraph/vendor/bundle/ruby/2.6.0/extensions/x86_64-linux/2.6.0/nokogiri-1.10.10/gem_make.out An error occurred while installing nokogiri (1.10.10), and Bundler cannot continue. Make sure that `gem install nokogiri -v '1.10.10' --source 'https://rubygems.org/'` succeeds before bundling. In Gemfile: solargraph was resolved to 0.40.0, which depends on reverse_markdown was resolved to 2.0.0, which depends on nokogiri
親の顔ほどみたエラー。つらい。
動いてるスクリプトに設定を追加
自分が使っているパッケージマネージャーはdein.vim
です。
dein配下にあるsolargraphのスクリプトを確認してみます。パスは$HOME/.cache/dein/.cache/.vimrc/.dein/installer/install-solargraph.sh
でした(人によって違うと思うのでファイル名で検索するのもありかも)
#!/usr/bin/env bash set -e git clone --depth=1 https://github.com/castwide/solargraph . bundle install --without development --path vendor/bundle cat <<EOF >solargraph #!/usr/bin/env bash DIR=\$(cd \$(dirname \$0); pwd) BUNDLE_GEMFILE=\$DIR/Gemfile bundle exec ruby \$DIR/bin/solargraph \$* EOF chmod +x solargraph
とりあえず、よく解決する設定をこのファイルにぶち込みます。
#!/usr/bin/env bash set -e git clone --depth=1 https://github.com/castwide/solargraph . bundle config build.nokogiri --use-system-libraries # これ bundle install --without development --path vendor/bundle cat <<EOF >solargraph #!/usr/bin/env bash DIR=\$(cd \$(dirname \$0); pwd) BUNDLE_GEMFILE=\$DIR/Gemfile bundle exec ruby \$DIR/bin/solargraph \$* EOF chmod +x solargraph
gem追加
もう一点。エラーメッセージにあった、mini_portile関連でエラーになってるっぽかったのでローカルに追加します。
$ gem install mini_portile
とりあえずこれで設定はおk。
LspInstallServer再実行
はい、うまくいったー。
調べても全く出てこなかったので、自力で頑張ってみました。
vim-lspでgem関連エラーが出る場合は実行スクリプト内でgemの操作をやってみるといいかもしれませんね。
それでは、おつでした。