3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ユニークビジョン株式会社Advent Calendar 2020

Day 9

NeovimにRustの開発環境を構築する

Last updated at Posted at 2020-12-08

この記事は ユニークビジョン株式会社 Advent Calendar 2020 の9日目の記事です。

はじめに

社内でRustを使う風潮になってきているので、
Neovimに、Rustの開発環境を構築してみます。
ほぼプラグインの紹介になります。

プラグインマネージャーを導入する

プラグインの導入・管理を簡単にするため、プラグインマネージャーを導入します。
本記事では、dein.vimを導入します。
~/.config/nvim/init.vimに以下を追記します。

~/.config/nvim/init.vim
" dein.vimのディレクトリ
let s:dein_dir = expand('~/.vim/dein')
let s:dein_repo_dir = s:dein_dir . '/repos/github.com/Shougo/dein.vim'

" なければgit clone
if !isdirectory(s:dein_repo_dir)
  execute '!git clone https://github.com/Shougo/dein.vim' s:dein_repo_dir
endif
execute 'set runtimepath^=' . s:dein_repo_dir

if dein#load_state(s:dein_dir)
  call dein#begin(s:dein_dir)

  " 管理するプラグインを記述したファイル
  let s:toml = '~/.dein.toml'
  let s:lazy_toml = '~/.dein_lazy.toml'
  call dein#load_toml(s:toml, {'lazy': 0})
  call dein#load_toml(s:lazy_toml, {'lazy': 1})

  call dein#end()
  call dein#save_state()
endif

" その他インストールしていないものはこちらに入れる
if dein#check_install()
  call dein#install()
endif

動きとしては、指定した箇所にdein.vimが入っているかチェックし、
入っていなければgit cloneします。
また、プラグインの情報を外部のTOMLファイルにまとめることができ、
call dein#load_toml(s:toml, {'lazy': 0})ではプラグインの情報をまとめたTOMLファイルを読み込んでいます。
プラグインの情報はこのTOMLファイルに書き込んでいくことになります。
ここではホームディレクトリ直下に置くように指定していますが、お好みで場所を変えてください。
最後に、プラグインがインストールされているかチェックし、インストールされていないものはインストールします。

Language Server Protocolを導入する

Language Server Protocolを導入すると、入力補完であったり、定義位置ジャンプなどが簡単にできるようになります。
Language Serverの導入には、coc.nvimを使います。

.dein.tomlに以下を追記します。

.dein.toml
[[plugins]]
repo = 'neoclide/coc.nvim'
rev = 'release'
hook_add = '''
  nnoremap [coc] <Nop>
  nmap <space>c [coc]
  nmap <silent> [coc]f <Plug>(coc-format)
  nmap <silent> [coc]<space> :<C-u>CocList<cr>
  nmap <silent> [coc]rn <Plug>(coc-rename)
  nmap <silent> [coc]h :<C-u>call CocAction('doHover')<cr>
  nmap <silent> [coc]d <Plug>(coc-definition)
  nmap <silent> [coc]rf <Plug>(coc-references)
'''

hook_addではよく使う機能をキーマップしています。
中でも特によく使うのは定義元へのジャンプ(<Plug>(coc-definition))や、
関数や変数の型や定義の表示(:call CocAction('doHover')<cr>)です。

上記を追記したら、neovimを再起動するか、:source ~/.config/nvim/init.vimとしてください。

coc-rust-analyzerを入れる

coc-rust-analyzer
nvim内で、以下のコマンドを実行してください。

:CocInstall coc-rust-analyzer

必要なファイルが足りなければインストールするか聞いてくれますので、
都度インストールすると良いと思います。

これで.rsファイルを開いたときに、入力補完などをしてくれるようになります。

その他便利なプラグイン

Rustとは直接関係ありませんが、
あると便利なプラグインをいくつか紹介します。

vim-quickrun

vim-quickrun
:QuickRunとすることでウィンドウに表示されているプログラムを実行してくれます。
また、<Leader>rと打っても実行できます。<Leader>はデフォルトで\なので、
変更していなければ\rと打つことでプログラムを実行できます。
保存するほどでもない簡単なプログラムを実行したり、動作を見ながらコーディングしていくのに便利です。

fzf

fzf.vim
導入が若干面倒ですが、便利なプラグインです。
Gitで管理されているファイル一覧や、バッファにあるファイル一覧などを表示でき、
表示したファイルはファジー検索できるので、ファイルの移動はこれだけでもいいくらい便利なプラグインです。

vim-fugitive

vim-fugitive
Vimで動くGitのクライアントです。
Git diffがVim上で見れたり、addしてcommitする流れが簡単にできたりと、
Gitを使った開発をするのであれば入れておくと便利なプラグインです。

おわりに

Language Serverはとても強力な上、導入もかなり楽になっているのはとても嬉しい点です。
ただ、coc-rust-analyzerを導入するのにexコマンドを打つ必要があるのが若干気になるところで、
できればここもファイルで管理したい気持ちがあります。
いずれ気持ちが向いたときにここらへんはちゃんと整理したいと思います。

3
5
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?