Rustのコーディングを支援するrust-analyzerが、少し前にアルファリリースを迎えたとか今後は公式の標準的なツールになるとかの噂を聞き、自分のVim環境に入れてみようと思いました。
しかしrust-analyzerを使おうとUser Manualを見ると、まずcoc.nvimを入れろと言われ、coc.nvimのためにはPluginをどーのこーのとかバージョン要件がどーのとか言われ、最近のモダンなVim環境をちゃんと構築したことがない初心者には少ししんどいところもあったので、イチからの構築手順を記録しておこうと思います。
構築手順
使うツールとしてはこんな感じです。
ベースとなるシステムはLinux(Debian)になります。
- Neovim
- Vundle
- coc.nvim
- rust-analyzer
NeovimとVundleあたりは他の選択肢があります。
以下で各手順について詳しく説明していきます。
Neovim
恥ずかしながら今まで存在を知りませんでした。Neovimが何者かというのを正確に伝えるのは難しそうなので公式ドキュメントに目を通して頂くとして、まあ新しいVimの別実装くらいに思っておけばいいのではないでしょうか。
rust-analyzerはVimでもNeovimでも使えるようですが、どちらも結構新しめのバージョンが必要で、パッケージマネージャ(apt)でインストールされるものでは対応できませんでした。なので、現時点ではどちらを選択するにせよ自力で用意する必要があります。
その点でNeovimはめちゃくちゃ楽です。リリースページにアクセスし、Assetsにある自分の環境に合ったtarballをダウンロードして展開すれば使えます。バージョンはある程度新しければ何でもいいと思いますが、stableあたりが安心なのではないでしょうか。
$ wget https://github.com/neovim/neovim/releases/download/stable/nvim-linux64.tar.gz
$ tar xzf nvim-linux64.tar.gz
$ cd nvim-linux64/bin/
$ ./nvim
ちなみにVimは自分でビルドする必要がありますし、環境設定がややこしくて私は途中でめげました、、、
Vundle
VundleはVimのプラグインマネージャーです。Vimのプラグインマネージャーはいろいろあって、例えばcoc.nvimの手順例ではvim-plugが使われているようです。そこまで強い理由はないのですが、前から使っているのでVundleを選択しました。
導入はVundleのリポジトリにあるQuick Startの手順でやれば問題ありません。まずVundleをgitでcloneしてきます。
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
次にinit.vimに設定を書き込みます。Vimでいう~/.vimrc
は、Neovimの場合~/.config/nvim/init.vim
が相当することに注意して下さい。公式の.vimrcは設定例なども含まれていて長いですが、最低限これだけあれば大丈夫です。
set nocompatible
filetype off
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'
" Pluginを追加する場合はここに記載します。
call vundle#end()
filetype plugin indent on
nvimを立ち上げて:PluginInstall
を実行すればVundleの設定完了です。
coc.nvim
coc.nvimは、LSPクライアントとして動作してくれるいろいろ便利なVimのプラグインです。rust-analyzerがLSPサーバなので、ここではその対となる存在ですね。リポジトリのQuick Startでは上述した通りプラグインマネージャーにvim-plugを使っていますが、ここではVundleを使った手順で説明していきます。
coc.nvimにはNode.jsが必要なのでインストールしておきます。また、公式手順には記載がないようですが、yarnもないといけないようなので、そちらもインストールします。
# curl -sL install-node.now.sh/lts | bash
# npm install -g yarn
Vundleでの追加は、Vim Awesomeのcoc.nvimのページに従ってやっていきます。先ほど作ったinit.vimにPlugin 'neoclide/coc.nvim'
を追加し、:source %
、:PluginInstall
と打ちます。加えて、:CocInstall coc-json coc-tsserver
と打てば、coc.nvimの準備完了です。
もしVimもしくはNeovimのバージョンが足りていない場合は、立ち上げた際にcoc.nvimが警告を出してくれます。
rust-analyzer
ようやく下準備が完了したので、これでrust-analyzerが入れられます。
公式手順には、まずrust-analyzerの本体をインストールしろと書いてありますが、実はここでやらなくても、coc.nvimが検知してうまくやってくれます。なのでこの手順は飛ばしても問題ないですが、一応載せておきます。
$ curl -L https://github.com/rust-analyzer/rust-analyzer/releases/latest/download/rust-analyzer-linux -o ~/.local/bin/rust-analyzer
$ chmod +x ~/.local/bin/rust-analyzer
後は簡単です。nvimを立ち上げて:CocInstall coc-rust-analyzer
と打ちます。本体のインストールを飛ばした場合は、再度立ち上げたときに本体をインストールするか聞かれるので、そこでお願いすれば設定完了になります。
お疲れ様でした!
おまけ
基本的にはこれで完了ですが、個人的にやったこと、はまったことについても残しておきます。
動作のチューニング
細かい動作のチューニングパラメータはcoc-rust-analyzerのリポジトリに記載があります。また、ここに記載があるrust-analyzerとしてのパラメータとは別に、coc.nvim自体の設定もあります。設定は:CocConfig
から行うか、直接~/.config/nvim/coc-settings.json
を編集しても問題ありません。
私はとりあえず、補完候補を表示する際に第一選択肢が最初から選択状態になるようにsuggest.noselect
を無効にしました。
{
"suggest.noselect": false
}
まだ使い始めたばかりなので、細かいチューニングはこれから少しずつやっていきたいですね。
screen/tmuxとの併用
私はGNU screenを愛用していたのですが、なぜかscreenとrust-analyzerを併用したときだけ表示が崩れるという問題があり、いろいろ頑張ったものの解決するには至りませんでした、、
なので同じような機能を提供してくれるtmuxを試してみたところ、こちらでは表示が崩れずうまくいき、とりあえずは乗り換えて使っていくことにしました。screenとtmuxは使い勝手も近いので移行はそこまで大変ではなく助かりました。
表示が一部消えてる?
rust-analyzerでは特定の補完候補にカーソルを合わせると標準ライブラリの説明を表示してくれたりするんですが、その中のコードの一部が背景色と同じになっているのか、うまく表示されないんですよね。colorscheme変えてみたりするもうまくいかず、、もし解決策ご存じの方がいましたらコメント頂けるとうれしいです。
感想
少し苦戦したところもありましたが、rust-analyzerでより快適なVim+Rustの生活を送ることができそうです。組み合わせによっては挙動(表示?)があやしい部分も見られましたが、逆に言うとまだまだ発展途上のツールたちなので、今後の修正や機能追加も注目ですね。