所需Vim插件

1
2
3
4
5
6
7
8
# vim-plug
库地址: https://github.com/junegunn/vim-plug

# rust.vim
库地址: https://github.com/rust-lang/rust.vim

# coc.nvim
库地址: https://github.com/neoclide/coc.nvim

安装教程

此处安装环境以AlmaLinux9为例

在安装这类工具时,应当注意插件所需Vim的版本,如果Vim的版本太低可能无法安装

vim-plug安装

1
2
3
# 下载源代码
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

添加rust.vim和coc.nvim的配置到~/.vimrc文件

最终编辑好的~/.vimrc文件应该是下面这样

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
" vim-plug setup
call plug#begin('~/.vim/plugged')

Plug 'rust-lang/rust.vim'
Plug 'neoclide/coc.nvim', {'branch': 'release'}

call plug#end()

" rust.vim setup
syntax enable
filetype plugin indent on
let g:rustfmt_autosave = 1

" coc.nvim setup
set updatetime=100

inoremap <silent><expr> <TAB>
\ coc#pum#visible() ? coc#pum#next(1) :
\ CheckBackspace() ? "\<Tab>" :
\ coc#refresh()
inoremap <expr><S-TAB> coc#pum#visible() ? coc#pum#prev(1) : "\<C-h>"

inoremap <silent><expr> <CR> coc#pum#visible() ? coc#pum#confirm()
\: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"

function! CheckBackspace() abort
let col = col('.') - 1
return !col || getline('.')[col - 1] =~# '\s'
endfunction

nmap <silent> [g <Plug>(coc-diagnostic-prev)
nmap <silent> ]g <Plug>(coc-diagnostic-next)

nmap <silent> gd <Plug>(coc-definition)
nmap <silent> gy <Plug>(coc-type-definition)
nmap <silent> gi <Plug>(coc-implementation)
nmap <silent> gr <Plug>(coc-references)

autocmd CursorHold * silent call CocActionAsync('highlight')

Vim插件安装

Vim控制台输入

1
:PlugInstall

coc-rust-analyzer安装

等待rust.vim和coc.nvim安装完成后,在Vim控制台输入

1
:CocInstall coc-rust-analyzer

配置coc-settings.json文件

在Vim控制台输入命令来编辑coc-settings.json

1
:CocConfig

写入以下内容

1
2
3
4
{
"suggest.noselect": true,
"suggest.enablePreselect": false
}

coc.nvim需要Node.js才能正常运行,所以在使用时应检查是否安装了Node.js且其版本也应满足要求。在AlmaLinux下使用sudo dnf install nodejs安装Node.js

可能的问题

下载失败

因为众所周知的网络原因,在国内下载安装插件时可能会出现无法成功下载的情况,这时需要多次尝试下载或使用代理下载

启动rust-analyzer

进入cargo项目时,coc.nvim会提示需下载rust-analyzer,根据提示选择即可。如果没有自动跳出安装提示,则可以使用rustup component add rust-analyzer手动安装

~/.vimrc文件配置

顺便记录一下自己的~/.vimrc文件内容,以便今后重新配置的时候使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
" init setup
set nu
set ts=4
set expandtab
set listchars=tab:>-,trail:.
set list
set backspace=2

" vim-plug setup
call plug#begin('~/.vim/plugged')

Plug 'rust-lang/rust.vim'
Plug 'neoclide/coc.nvim', {'branch': 'release'}
Plug 'preservim/nerdtree'
Plug 'vim-airline/vim-airline'
Plug 'morhetz/gruvbox'

call plug#end()

" rust.vim setup
syntax enable
filetype plugin indent on
let g:rustfmt_autosave = 1

" coc.nvim setup
set updatetime=100

inoremap <silent><expr> <TAB>
\ coc#pum#visible() ? coc#pum#next(1) :
\ CheckBackspace() ? "\<Tab>" :
\ coc#refresh()
inoremap <expr><S-TAB> coc#pum#visible() ? coc#pum#prev(1) : "\<C-h>"

inoremap <silent><expr> <CR> coc#pum#visible() ? coc#pum#confirm()
\: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"

function! CheckBackspace() abort
let col = col('.') - 1
return !col || getline('.')[col - 1] =~# '\s'
endfunction

nmap <silent> <C-q> <Plug>(coc-diagnostic-prev)
nmap <silent> <C-a> <Plug>(coc-diagnostic-next)

nmap <silent> gd <Plug>(coc-definition)
nmap <silent> gy <Plug>(coc-type-definition)
nmap <silent> gi <Plug>(coc-implementation)
nmap <silent> gr <Plug>(coc-references)

autocmd CursorHold * silent call CocActionAsync('highlight')

" nerdtree setup
map <F3> :NERDTreeMirror<CR>
map <F3> :NERDTreeToggle<CR>

" airline setup
let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#left_sep = ' '
let g:airline#extensions#tabline#left_alt_sep = '|'
let g:airline_powerline_fonts = 1

" theme setup
set background=dark
colorscheme gruvbox