所需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
|
安装教程
在安装这类工具时,应当注意插件所需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
| call plug#begin('~/.vim/plugged')
Plug 'rust-lang/rust.vim' Plug 'neoclide/coc.nvim', {'branch': 'release'}
call plug#end()
syntax enable filetype plugin indent on let g:rustfmt_autosave = 1
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控制台输入
coc-rust-analyzer安装
等待rust.vim和coc.nvim安装完成后,在Vim控制台输入
1
| :CocInstall coc-rust-analyzer
|
配置coc-settings.json文件
在Vim控制台输入命令来编辑coc-settings.json
写入以下内容
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
| set nu set ts=4 set expandtab set listchars=tab:>-,trail:. set list set backspace=2
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()
syntax enable filetype plugin indent on let g:rustfmt_autosave = 1
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')
map <F3> :NERDTreeMirror<CR> map <F3> :NERDTreeToggle<CR>
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
set background=dark colorscheme gruvbox
|