# vim-lsp + rust-analyzerを試してみた

元々rlsを使用してrustを書いていたのですが、rls-2.0としてrust-analyzerというものが
あることを知ってvimで使用できるかどうか試してみました。

rust-analyzer公式ページ

環境

macOS: 10.15.4
vim: 8.2.647
vim-lsp, rust-analyzer などは2020-04-27時点での最新版を使用しています。

インストール

  1. 事前準備
    rust-srcの追加
# rustup component add rust-src
  1. rust-analyzerのインストール
# git clone https://github.com/rust-analyzer/rust-analyzer
# cd rust-analyzer
# cargo xtask install
  1. vim-lspの設定
if executable('rust-analyzer')
  au User lsp_setup call lsp#register_server({
        \ 'name': 'rust-analyzer',
        \ 'cmd': {server_info->['rust-analyzer']},
        \ 'whitelist': ['rust'],
        \ })
endif

備考

rust nightly 1.47 から RUST_SRC_PATH に設定していた$(rustc --print sysroot)/lib/rustlib/src/rust/src
$(rustc --print sysroot)/lib/rustlib/src/rust/libraryに変更しないと候補が上手くでなくなりました。

f:id:yasu-n1:20200427204920p:plain

Vim Killed 9

Vim killed 9

[環境]
* macOS high sierra(10.14.2)
* pyenv: python 3.7.1
* rbenv: ruby 2.6.0
* plenv: perl 5.28.0
* clang: 7.0.1(using homebrew)

[詳細]
vimenvvim-build を使用して vimコンパイルしているのですが以下のエラーが出て実行できません。

vimの実行結果:

$ vim
Killed 9

otoolの結果:

$ otool -L ./vim
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/objdump: './vim': truncated or malformed object (load command 17 LC_LOAD_DYLIB library name extends past the end of the load command)

コンパイルログ: gist

githubvim issue にあることはやってみましたが、 問題は解決されませんでした。

Homebrewでインストールしたbinutilsが原因でできなかったっぽいです。
brew uninstall binutilsvimのインストールに成功しました。

[詳細]
pythonperlrubyのインストールにも影響があったみたいで、arとranlibコマンドで それぞれエラーが出てましたが、同時に解決しました。

vim-build で タグでのインストールができるようになりました

以下の点を更新しました。

  • n オプションの追加
  • l オプションの追加
  • t オプションの追加
  • o オプションの削除

nオプション

nオプションは最新版のvimをインストールしたい場合に使用します。
フォルダ名は```latest````で作成されます。

また、ファイル名を指定してインストール(-f <FILE_NAME>)する場合、 フォルダ名はvimで作成されるようになりました。

lオプション

lオプションはvimのタグ名を取得するオプションです。
取得するのにcurlコマンドを使用しています。
もし、curlコマンドが使用できない場合、ここから.hgtagsを
vim-buildディレクトリ直下にhgtagsに名前を変更して置けば、
lオプションでタグ名を確認することができます。

tオプション

lオプションで表示されたタグ名を-t <TAG_NAME>とすれば、
そのタグのバージョンをインストールすることができます。
フォルダ名は、指定したタグ名で作成されます。

oオプション

上記の理由からoオプションは削除しました。

eskk.vim でハマった

久しぶりにeskk.vimを使用してみたら日本語変換できずハマったのでメモしておく。
変更した点はOSのLANG設定とvimrcのlanguageのところ。

色々試してみたところ、次のように変更したら日本語変換できるようになった。

before
 1. OS
    LANG=en_US.UTF-8

 2. language mes en_US.utf8
    :!locale -a で確認
after
 1. OS
    $ export LANG=C

 2. vimrc
    language mes en_US.utf8

g:eskk#log_cmdline_level = 4で確認してみたところ、LANG=en_US.UTF-8の場合は
入力した文字がeskk#complete#eskkcomplete()a:baseにセットされないようでした。
ひとまず、日本語変換できるようになったのでよしとしておく。

vim-build の修正

前回書いたvim-build 作りました で書いた vim-build を修正しました。
主な修正点は、次のようになります。
1. 出力先ディレクトリは -o で指定
2. vimenv install した時のread -p "Press the enter" で一時停止させていたのを無効化

これで、以前より使い勝手は良くなったと思います。

perl-plack.vim を作りました

perlPSGI アプリを vim で作っているときに、
実行するためにファイルを保存して plackup <psgi_file> とするのが億劫なので
編集中の psgi ファイルから直接 plackup を実行できるようにしました。

  1. インストール
    perl-plack.vim のソースは github で公開してます。
    Neobundle をインストール済みの場合、以下を .vimrc に記述してください。
    Neobundle 'yasu-n/perl-plack.vim.git'

    次にノーマルモードで NeobundleInstall を実行するとインストールされます。

  2. 使用方法
    実行する psgi ファイルを開いている状態で、
    :Unite perl/plack を実行してください。
    実行すると unite バッファに plackup の出力がでます。

  3. plackup のオプションは今のところ追加できるようにはしていません。

vim-build 作りました

Vim Advent Calendar 307 日目の記事です。

vim-buildruby-build や perl-build のように簡単にユーザ環境へ vim をインストールしたくて作成しました。

rbenv、plenv に相当する vimenv は ここにあるものを使用させていただいています。

  • なお、最新バージョンの vim のみの対応となっています。
1. vim-build の インストール
  $ git clone https://github.com/yasu-n/vim-build.git ~/.vimenv/plugins/vim-build
  $ vimenv install

2. ディレクトリ指定のインストール
  $ VIM_VERSION=hoge vimenv install
    -> .vimenv/versions/hoge がにインストールされる

 * vimenv install --with-compiledby=foohoge
   のように別途オプションを追加できます。

インストールしたディレクトリを削除するには
  $ vimenv uninstall hoge
    -> .vimenv/versions/hoge 以下が削除されます。

最新版の vim を楽に local 環境に入れたい方にはお勧めです。