構成の候補としては、
rust.vim + deoplete-rust
と
rust.vim + vim-racer
の2パターンがある。
rust.vimは :make build | cw
をすることでエラーメッセージをQuickFixに対応させてくれる。
deoplete-rustもvim-racerもどちらもコード補完プラグインだが、どちらもracerを使ってるし挙動がかなり似ている。
私は補完時に最上部に宣言を表示してくれるという理由で、deoplete-rustを選択した。
rust-docを紹介するが、動作がかなり遅く、deoplete-rust/vim-racerのドキュメント機能で十分なため、rust-docは没。
rustfmtも開発中なので没。
- Rust導入
curl https://sh.rustup.rs -sSf | sh
- racer導入
# コード補完ツールっぽい。
cargo +nightly install racer # nightlyのrustをまだ持ってない人は`rustup toolchain add nightly`で入れておく
- rustfmt導入
没。
現状ではこれはnightly版のRustでしか入らないっぽい?
シンタックスチェックは後述のrust.vimでもできる(というかrust.vimを入れるとrustfmt.vimも入る?)っぽいので現状はそれで代用することにします。
# シンタックスチェックツールっぽい。
cargo install --git 'https://github.com/rust-lang-nursery/rustfmt'
- rust-src
# コード補完するために必要なrust本体のソースコードっぽい。
rustup component add rust-src
- rustドキュメント
最新版のドキュメントのリンクは https://github.com/rhysd/rust-doc.vim を参照
wget https://static.rust-lang.org/dist/rust-1.0.0-i686-unknown-linux-gnu.tar.gz
tar xf rust-1.0.0-i686-unknown-linux-gnu.tar.gz
mv rust-1.0.0-i686-unknown-linux-gnu/rust-docs {任意}/
- rust.vim
[[plugins]]
repo = 'rust-lang/rust.vim'
on_ft = 'rust'
hook_source = '''
let g:rustfmt_autosave = 1
let g:rust_doc#define_map_K = 0
'''
- deoplete-rust
先にdeoplete.nvimは自力で入れておいてください
[[plugins]]
repo = 'sebastianmarkow/deoplete-rust'
on_ft = 'rust'
depends = ['deoplete.nvim']
hook_source = '''
let g:deoplete#sources#rust#racer_binary='{racerバイナリのフルパス}'
let g:deoplete#sources#rust#rust_source_path='{$(rustc --print sysroot)/lib/rustlib/src/rust/srcをここに書く}'
let $RUST_SRC_PATH='{$(rustc --print sysroot)/lib/rustlib/src/rust/srcをここに書く}'
let g:deoplete#sources#rust#show_duplicates=1
let g:deoplete#sources#rust#disable_keymap=1
nmap <buffer> gd <plug>DeopleteRustGoToDefinitionDefault
nmap <buffer> K <plug>DeopleteRustShowDocumentation
'''
K: カーソル下の単語のドキュメントを開く
gd: カーソル下の単語の宣言へジャンプ
- vim-racer
[[plugins]]
repo = 'racer-rust/vim-racer'
on_ft = 'rust'
hook_source = '''
" racerバイナリ指定
let g:racer_cmd = '{racerバイナリのフルパス}'
" rust本体のソースコードパス指定
let $RUST_SRC_PATH='{$(rustc --print sysroot)/lib/rustlib/src/rust/srcをここに書く}'
'''
- rust-doc.vim
没。
めちゃくちゃ遅い。
deoplete-rust / vim-racer のドキュメントで十分。
[[plugins]]
repo = 'rhysd/rust-doc.vim'
on_ft = 'rust'
hook_source = '''
" rustドキュメントのパス指定
let g:rust_doc#downloaded_rust_doc_dir = '{rustドキュメントのフルパス}'
'''
:RustDoc {検索ワード}
以下のエラーが出た方はこちらの記事へ。
rust-doc-open: Failed to open URL: Unescaped left brace in regex is deprecated, passed through in regex; marked by <-- HERE in m/%{ <-- HERE (.*?)}/ at usr/bin/run-mailcap line 528.^@Couldn't find a suitable web browser!^@Set the BROWSER environment variable to your desired browser.^@Warning: program returned non-zero exit code #1^@/usr/bin/xdg-open: 771: /usr/bin/xdg-open: www-browser: not found^@/usr/bin/xdg-open: 771: /usr/bin/xdg-open: links2: not found^@/usr/bin/xdg-open: 771: /usr/bin/xdg-open: elinks: not found^@/usr/bin/xdg-open: 771: /usr/bin/xdg-open: links: not found^@/usr/bin/xdg-open: 771: /usr/bin/xdg-open: lynx: not found^@/usr/bin/xdg-open: 771: /usr/bin/xdg-open: w3m: not found^@xdg-open: no method available for opening '/home/miyagaw61/docs/rust-docs/share/doc/rust/html/std/vec/index.html'^@
補足
- この手順で導入したところ、なぜか
$HOME/bin/neovim/share/nvim/runtime/autoload/
以下にrust.vimとrustfmt.vimがいた所為でdeinを切ってもrust.vimが読まれてしまうという事案が発生しました。
deinでプラグイン管理をしている場合は、削除を推奨します。 - letで変数にパスを代入する場面が結構あるが、ここに$HOMEなどの環境変数を入れると正常に動作しないらしい。
参考
- » プログラミング言語Rust https://rust-lang-ja.github.io/the-rust-programming-language-ja/1.6/book/
- » 気付いたらRustの環境構築がかなり楽になってた | κeenのHappy Hacκing Blog http://keens.github.io/blog/2016/12/29/kizuitararustnokankyoukouchikugakanarirakuninatteta/
- » プログラミング言語Rustはじめてみる | ぬわーーーーーーー!!! https://yoheikoga.github.io/2017/04/04/start-rust-lang/
- » VimにRust開発用の設定入れる - Qiita https://qiita.com/hinagishi/items/f43538ce8120e483077e
- » Rustでコード補完(Windowsにracer, vim-racer導入) - Read -> Blog http://codom.hatenablog.com/entry/2017/07/29/203348
- » Rust開発の環境設定 https://skoji.jp/blog/2017/05/rust-env.html
- » Vim ではじめる Rust 1.0 - はやくプログラムになりたい http://rhysd.hatenablog.com/entry/2015/05/15/212054
- » Rust入門 - 開発環境構築 - 無理なご乗車はおやめ下さい。 http://tydk27.hatenadiary.com/entry/20160713/1468416790