Rustでコード補完(Windowsにracer, vim-racer導入)

GitHub - racer-rust/racer: Rust Code Completion utility

(この記事はマニュアルの転載と作業ログからなっています。特に引っ掛かったところはありませんでした。)

インストー

cargoで一発インストールできます*1

$ cargo install racer

rustのバージョンはnightlyです*2

$ rustc --version
rustc 1.21.0-nightly (599be0d18 2017-07-26)

設定

補完するのに必要な、Rustのソースコードrustupから入れます。

$ rustup component add rust-src

ソースは$(rustc --print sysroot)/lib/rustlib/src/rust/srcにインストールされます。rustc --print sysrootの内容はコマンドプロンプトから確かめてください。だいたいC:\User\username\.rustup\toolchains\nightly-x86_64-pc-windows-msvcという感じだと思います(usernameはユーザーの名前)。

上のパスの内容をRUST_SRC_PATH環境変数として登録します*3

これでコマンドラインからracerを動かせます。

$ racer complete std::io::B
MATCH BufRead,1233,10,C:\Users\{usename}\.rustup\toolchains\nightly-x86_64-pc-windows-msvc\lib\rustlib\src\rust\src\libstd\io\mod.rs,Trait,pub trait BufRead: Read
MATCH Bytes,1818,11,C:\Users\{username}\.rustup\toolchains\nightly-x86_64-pc-windows-msvc\lib\rustlib\src\rust\src\libstd\io\mod.rs,Struct,pub struct Bytes<R>
MATCH BufReader,50,11,C:\Users\{username}\.rustup\toolchains\nightly-x86_64-pc-windows-msvc\lib\rustlib\src\rust\src\libstd\io\buffered.rs,Struct,pub struct BufReader<R>
MATCH BufWriter,310,11,C:\Users\{username}\.rustup\toolchains\nightly-x86_64-pc-windows-msvc\lib\rustlib\src\rust\src\libstd\io\buffered.rs,Struct,pub struct BufWriter<W: Write>

vim-racerの導入

GitHub - racer-rust/vim-racer: Racer support for Vim

インストールはプラグインマネージャーから適当にやっておきます(私はdein.vimcall dein#add('racer-rust/vim-racer')しました)

.vimrcに設定を書きます。cargoから普通にインストールしていれば次のパスでいけるはずです。

let g:racer_cmd = expand('~/.cargo/bin/racer')

これで挿入モードに入りCtrl-x, Ctrl-oで補完が効くようになります。

*1:設定は一発ではない

*2:racerはstableでビルドできるが、clippyというlintツールを使う場合nightlyを要求される

*3:Windows環境変数の編集は面倒です。Rapid Environment Editorなどを使いましょう