How to setup neovim for rust on windows

We need rust, neovim, python. that’s it.

First of all.

Install neovim.

I use chocolately.

Note. Installing Chocolately guide : https://chocolatey.org/install

I can find neovim package in choco

C:\Windows\system32>choco search neovim
Chocolatey v0.10.15
neovim 0.4.3 [Approved]
1 packages found.
C:\Users\seung>choco install neovim -y

But to support rust on nvim properly. We need nvim 0.5.0+. I just install 0.4.3 version via choco then overwrite archived neovim 0.5.0 package (nvim-win64.zip) located in https://github.com/neovim/neovim/releases

Note. neovim via choco will installed in C:\tools\neovim

Then I can get following version information.

C:\Windows\system32>nvim --version
NVIM v0.5.0-309-g05ea3c199
Build type: RelWithDebInfo
LuaJIT 2.1.0-beta3
Compilation: C:/Program Files (x86)/Microsoft Visual Studio/2017/Community/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x64/cl.exe /DWIN32 /D_WINDOWS /W3 /MD /Zi /O2 /Ob1 /DNDEBUG /W3 -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE -DWIN32 -D_WIN32_WINNT=0x0600 -DINCLUDE_GENERATED_DECLARATIONS -DUTF8PROC_STATIC -DNVIM_MSGPACK_HAS_FLOAT32 -DNVIM_UNIBI_HAS_VAR_FROM -DMIN_LOG_LEVEL=3 -IC:/projects/neovim/build/config -IC:/projects/neovim/src -IC:/projects/nvim-deps/usr/include -IC:/projects/neovim/build/src/nvim/auto -IC:/projects/neovim/build/include
Compiled by appveyor@APPVYR-WIN

Features: -acl +iconv +tui
See ":help feature-compile"

   system vimrc file: "$VIM\sysinit.vim"
  fall-back for $VIM: "C:/Program Files/nvim/share/nvim"

Run :checkhealth for more info

Install python

Do not install python via window store. neovim can not find proper python path.

I use choco to install python3

C:\Users\seung>choco search python3
Chocolatey v0.10.15
python3 3.8.1.20200110 [Approved]
...
5 packages found.

C:\Users\seung>choco install python3 -y

Install rust

Install the rust (https://www.rust-lang.org/tools/install) and some packages

rustup update
rustup component add rustfmt
rustup component add clippy

Build and install rust-analyzer

Note. it require rust version 1.4.0+ Note. it requires terminal with Administrator permission.

C:\Windows\system32>cd %HOMEPATH%
C:\Users\seung>git clone https://github.com/rust-analyzer/rust-analyzer
Cloning into 'rust-analyzer'...
remote: Enumerating objects: 22, done.
remote: Counting objects: 100% (22/22), done.
remote: Compressing objects: 100% (19/19), done.
remote: Total 62042 (delta 4), reused 18 (delta 2), pack-reused 62020
Receiving objects: 100% (62042/62042), 16.27 MiB | 4.72 MiB/s, done.
Resolving deltas: 100% (40224/40224), done.
C:\Users\seung>cd rust-analyzer
C:\Users\seung\rust-analyzer>cargo xtask install --server
...
C:\Users\seung\rust-analyzer>cd ..
C:\Users\seung>rmdir /S /Q rust-analyzer
C:\Users\seung>ra_lsp_server --version
rust-analyzer 875352b

Install nvim plugin vim-plug

Open PowerShell terminal and type following

Note. see https://jdhao.github.io/2018/11/15/neovim_configuration_windows/#install-plugin-manager-vim-plug

PS C:\Users\seung> md ~\AppData\Local\nvim\autoload


    디렉터리: C:\Users\seung\AppData\Local\nvim


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
d-----     2020-01-13  오후 11:12                autoload


PS C:\Users\seung> $uri = 'https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim'
PS C:\Users\seung> (New-Object Net.WebClient).DownloadFile(
>>   $uri,
>>   $ExecutionContext.SessionState.Path.GetUnresolvedProviderPathFromPSPath(
>>     "~\AppData\Local\nvim\autoload\plug.vim"
>>   )
>> )
PS C:\Users\seung>pip install pynvim

Setup neovim for rust development

edit init.vim file on “~\AppData\Local\nvim\init.vim”

Note. following setting is in Configure neovim for rust development

call plug#begin()
Plug 'neovim/nvim-lsp'
Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }
Plug 'Shougo/deoplete-lsp'
Plug 'ervandew/supertab'
Plug 'Chiel92/vim-autoformat'
call plug#end()

let g:python3_host_prog = expand('C:/Python38/python.exe') 

" setup rust_analyzer LSP (IDE features)
lua require'nvim_lsp'.rust_analyzer.setup{}

" Use LSP omni-completion in Rust files
autocmd Filetype rust setlocal omnifunc=v:lua.vim.lsp.omnifunc

" Enable deoplete autocompletion in Rust files
let g:deoplete#enable_at_startup = 1

" customise deoplete                                                                                                                                                     " maximum candidate window length
call deoplete#custom#source('_', 'max_menu_width', 80)

" Press Tab to scroll _down_ a list of auto-completions
let g:SuperTabDefaultCompletionType = "<c-n>"

" rustfmt on write using autoformat
autocmd BufWrite * :Autoformat

"TODO: clippy on write
autocmd BufWrite * :Autoformat

nnoremap <leader>c :!cargo clippy

Important. I just combind the contents of the Internet, the source of each sections are included in the text.


comments powered by Disqus