Rust は 1.0.0beta が4月の頭にリリースされ,現在 1.0.0beta5 で 5/15 に 1.0.0 正式版がリリース予定です.
リリース間近であるのと,C++ をやっていた人はとっつきやすいとかデザインが良いというウワサを聞いて少し試してみていて,Vim の環境も少し整えたのでメモがてら書きます.
「こういうのもあるよ」とかあれば是非教えて下さい.
Rust のインストール
本家サイト にあるバイナリをインストールします.解凍して スクリプト一発でいけます.Mac だと Homebrew でも入れられるようです.
Vim の準備
シンタックスハイライト,インデントなど
GitHub の rust-lang organization に公式の Vim 用ファイルタイププラグインがあります.
https://github.com/rust-lang/rust.vim
これをインストールするだけでシンタックスハイライトやインデントは OK です.
補完
Racer という Rust の補完エンジンがあり,リポジトリ直下の plugin
ディレクトリに Vim 用のスクリプトがあるため,Racer のリポジトリ root に runtimepath
を通せばプラグインとして使えます.cargo build --release
でビルドしておく必要があります.
https://github.com/phildawes/racer
補完したい箇所でオムニ補完 <C-x><C-o>
を使えるようになります.
ただ,僕が試したときは 1.0.0beta5 ではまだ使えませんでした.
フォーマッタ
Rust のフォーマッタはまだ無いようです.RFCにはすで出ているようですが,まだ議論が進んでいないようです. Go の gofmt のようなものが標準でほしいところです.
- 追記(5/31)
rustfmt というフォーマッタが開発中のようです.
ドキュメント
Rust のビルドシステムかつパッケージマネージャな Cargo は開発中のプロジェクトのドキュメントや依存関係にあるパッケージのドキュメントを html で生成できます. しかし,生成したドキュメントを検索する良い方法はまだ無いようです.(一応こちらもRFCにはすでに要望が出ているみたいです.)
さすがにドキュメントはさっと開けないと面倒だなと思ったので,Vim からさっと開けるプラグインを作りました.
https://github.com/rhysd/rust-doc.vim
cargo doc
でドキュメントを生成した後であれば :RustDoc
コマンドや K
マッピングでドキュメントを開けます.あと,unite.vim で絞り込み検索もできます.
追記(5/18)
cargo
で管理していないソースコードでも使えるようになりました(標準ライブラリなどのドキュメント)
シンタックスチェック
ファイル保存時にシンタックスチェックを走らせます.
上記の rust.vim には既に syntastic 用のシンタックスチェッカーがあるのでそれを使えば良いようです.
vim-watchdogs や自力で設定したい場合は rustc -Zparse-only {file}
でシンタックスチェックができるようです.
Vim 設定まとめ
ここまでを踏まえて,とりあえず僕がやった設定はこんな感じです.
augroup MyVimrc autocmd! augroup END " ... " neobundle.vim でインストール NeoBundle 'rust-lang/rust.vim' NeoBundleLazy 'phildawes/racer', { \ 'build' : { \ 'mac' : 'cargo build --release', \ 'unix' : 'cargo build --release', \ }, \ 'autoload' : { \ 'filetypes' : 'rust', \ }, \ } NeoBundle 'rhysd/rust-doc.vim' " ... " racer の設定 let $RUST_SRC_PATH = expand('~/Dev/github.com/rust-lang/rust/src') " :QuickRun でファイル保存時にシンタックスチェック let g:quickrun_config = get(g:, 'quickrun_config', {}) let g:quickrun_config['syntax/rust'] = { \ 'command' : 'rustc', \ 'cmdopt' : '-Zparse-only', \ 'exec' : '%c %o %s:p', \ 'outputter' : 'quickfix', \ } autocmd MyVimrc FileType BufWritePost *.rs QuickRun -type syntax/rust
チュートリアル
Vim でチュートリアルをやりまくります.把握できているドキュメントは以下です.上から順にやると良さそう(?)
- rustbyexample :「猫でもできる C」 の rust 版みたいなもの.各構文のコード例が載ってます.直接コードを編集してその場で実行できるので,とりあえずこれでざっと構文を眺めます.
- Learn Rust :Guessing Game や Dining Philosophers を使ったチュートリアル.Cargo の基本的な使い方も学べます.
- Syntax and Semantics :rustbyexample よりも詳しい構文やセマンティクスの説明.
- Rust for Rubyist :Ruby ユーザ向けの Rust 入門らしい.まだやってないですがやる予定です.
- Rust for C++ Programmer C++ ユーザ向け Rust 入門らしい.まだやってないですがやる予定です.
この他にも Effective Rust などの進んだ内容のドキュメントもあるようです.
僕自身はまだ Syntax and Semantics をぼちぼち見ている感じです. 新しい言語の勉強をする時は vim-quickrun がとても便利で,その場で書いたコードを実行できます.デフォルトで rust にも対応しています.