从零开始vim搭建Java开发环境之coc.nvim篇
前⾔
vim之美妙我就不过多介绍了,懂的⾃然懂。之前我已经有⼀篇⽂章介绍如何使⽤SpaceVim来搭建Java开发环境。
传送门:
最近使⽤,感觉体验也很棒,与是就想使⽤coc.nvim平台也来搭建个Java开发环境,来⽐较⼀下哪个更适合⾃⼰。
环境
搭建环境千差万别,⼤同⼩异,理论上各⼤平台都是⽀持的,我把我的环境发⼀下仅供参考。
项⽬版本
操作系统Linux version 5.11.11-arch1-1 (linux@archlinux)
vim8.2 +python/dyn +python3/dyn
环境搭建
我们的主题就是⽤vim搭建Java开发环境,第⼀步当然是安装vim了,很多系统默认⾃带的vim是精简版本的,或者版本⽐较旧。建议⾃⼰安装⼀个,⽐如:macOS⾃带的vim就不⽀持python3,之前因为这个坑研究了好久才明⽩。
安装vim
安装vim或neovim都是可以的,上篇中我使⽤的neovim,这篇打算使⽤vim来搭建了。
sudo pacman -S vim
查询是否⽀持python3
vim --version
显⽰结果中如果有+python3字样就说明是⽀持的了。
这⾥需要注意⼀下,为了少⾛弯路,你安装的vim版本最好要有python3⽀持,因为我遇到过很多插件都需要这个。在archlinux中安装后默认就⽀持python3了。其他系统可以⾃⾏百度⼀下,如何让vim/neovim有python3⽀持。下列⽂章供参考:
《Centos安装nvim并⽀持python3》
《CentOS 安装vim8 + python3》
《archlinux 安装neovim并增加python3⽀持》
《macOS中SpaceVim搭建java开发环境》
安装vim-plug
Unix中vim环境执⾏下⾯命令完成安装,其他环境请参考项⽬主页的介绍。
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
raw.githubusercontent/junegunn/vim-plug/master/plug.vim
成功执⾏,就已经安装完成了。后⾯我们安装vim插件需要vim-plug。
安装node.js
coc.nvim依赖node.js⽽且版本要求nodejs >= 10.12。
archlinux下执⾏:
sudo pacman -S nodejs
sudo pacman -S npm
查node.js版本
node -v
v15.13.0
安装coc.nvim
配置vim的配置⽂件
vim ~/.vimrc
内容如下:
" Specify a directory for plugins
" - For Neovim: stdpath('data') . '/plugged'
" - Avoid using standard Vim directory names like 'plugin'
call plug#begin('~/.vim/plugged')
" Use release branch (recommend)
Plug 'neoclide/coc.nvim', {'branch': 'release'}
call plug#end()
:wq保存退出,重启打开vim后,执⾏:PlugInstall完成插件的安装。
编辑配置⽂件
vim ~/.vimrc
并在~/.vimrc下⾯增加如下内容:
" 设置vim的内部编码,在neovim上不需要,因为coc.nvim使⽤了⼀些
" autoload / float.vim⽂件中的unicode字符
set encoding=utf-8
set encoding=utf-8
" 如果未设置“隐藏”,则TextEdit可能会失败。
set hidden
" 某些服务器的备份⽂件有问题,请参阅#649。
set nobackup
set nowritebackup
" 留出更多空间来显⽰消息。
set cmdheight=2
" 较长的更新时间(默认值为4000 ms =4 s)会导致明显的
" 延迟和糟糕的⽤户体验。
set updatetime=300
" 不要将消息传递到| ins-completion-menu |。
set shortmess+=c
" 始终显⽰标志列,否则每次都会移动⽂本
" 诊断出现/已解决。
if has("patch-8.1.1564")
" 最近vim可以将signcolumn和number列合并为⼀个
set signcolumn=number
else
set signcolumn=yes
endif
" 使⽤制表符可完成带有前⾯字符的触发操作并进⾏导航。
" NOTE:这个命令':verbose imap <tab>'去确实你的<tab>键
" 没有被其他插件使⽤。
inoremap <silent><expr><TAB>
\ pumvisible()?"\<C-n>":
\ <SID>check_back_space()?"\<TAB>":
\ coc#refresh()
inoremap <expr><S-TAB>pumvisible()?"\<C-p>":"\<C-h>"
function! s:check_back_space() abort
let col =col('.')-1
return!col ||getline('.')[col -1]=~# '\s'
endfunction
" 使⽤<c-space>触发⾃动完成。
if has('nvim')
inoremap <silent><expr><c-space> coc#refresh()
else
inoremap <silent><expr><c-@> coc#refresh()
endif
" 使<CR>⾃动选择第⼀个完成项⽬,并将coc.nvim通知给
" 输⼊格式,<cr>可能会被其他vim插件重新映射
inoremap <silent><expr><cr>pumvisible()? coc#_select_confirm()
\:"\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"
" 使⽤`[g` and `]g`浏览诊断
" Use `:CocDiagnostics` to get all diagnostics of current buffer in location list. nmap <silent>[g <Plug>(coc-diagnostic-prev)
nmap <silent>]g <Plug>(coc-diagnostic-next)
" GoTo代码导航
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)
" 使⽤K在预览窗⼝中显⽰⽂档。
nnoremap <silent>K:call <SID>show_documentation()<CR>
function! s:show_documentation()
if(index(['vim','help'],&filetype)>=0)
execute 'h '.expand('<cword>')
execute 'h '.expand('<cword>')
elseif(coc#rpc#ready())
call CocActionAsync('doHover')
else
execute '!'.&keywordprg ." ".expand('<cword>')
endif
endfunction
" 按住光标时突出显⽰该符号及其参考。
autocmd CursorHold * silent call CocActionAsync('highlight')
" 重命名符号。
nmap <leader>rn <Plug>(coc-rename)
" 格式化选定的代码。
xmap <leader>f <Plug>(coc-format-selected)
nmap <leader>f <Plug>(coc-format-selected)
augroup mygroup
autocmd!
" Setup formatexpr specified filetype(s).
autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected')
" 更新有关跳转占位符的签名帮助。
autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp')
augroup end
" 将codeAction应⽤于所选区域。
" Example:`<leader>aap`for current paragraph
xmap <leader>a <Plug>(coc-codeaction-selected)
nmap <leader>a <Plug>(coc-codeaction-selected)
" 重新映射⽤于将codeAction应⽤于当前缓冲区的键。
nmap <leader>ac <Plug>(coc-codeaction)
" 将AutoFix应⽤于当前⾏的问题。
nmap <leader>qf <Plug>(coc-fix-current)
" 映射函数和类⽂本对象
" 注意:需要语⾔服务器提供'textDocument.documentSymbol'⽀持。
xmap if<Plug>(coc-funcobj-i)
omap if<Plug>(coc-funcobj-i)
xmap af <Plug>(coc-funcobj-a)
omap af <Plug>(coc-funcobj-a)
xmap ic <Plug>(coc-classobj-i)
omap ic <Plug>(coc-classobj-i)
xmap ac <Plug>(coc-classobj-a)
omap ac <Plug>(coc-classobj-a)
" Remap <C-f> and <C-b>for scroll float windows/popups.
if has('nvim-0.4.0')||has('patch-8.2.0750')
nnoremap <silent><nowait><expr><C-f> coc#float#has_scroll()? coc#float#scroll(1):"\<C-f>"
nnoremap <silent><nowait><expr><C-b> coc#float#has_scroll()? coc#float#scroll(0):"\<C-b>"
inoremap <silent><nowait><expr><C-f> coc#float#has_scroll()?"\<c-r>=coc#float#scroll(1)\<cr>":"\<Right>" inoremap <silent><nowait><expr><C-b> coc#float#has_scroll()?"\<c-r>=coc#float#scroll(0)\<cr>":"\<Left>" vnoremap <silent><nowait><expr><C-f> coc#float#has_scroll()? coc#float#scroll(1):"\<C-f>"
vnoremap <silent><nowait><expr><C-b> coc#float#has_scroll()? coc#float#scroll(0):"\<C-b>"
endif
" 使⽤CTRL-S作为选择范围。
" Requires 'textDocument/selectionRange' support of language server.
nmap <silent><C-s><Plug>(coc-range-select)
xmap <silent><C-s><Plug>(coc-range-select)
" 添加`:Format`命令格式化当前缓冲区。
command!-nargs=0 Format :call CocAction('format')
" 添加`:Fold`命令来折叠当前缓冲区。
" 添加`:Fold`命令来折叠当前缓冲区。
command!-nargs=? Fold :call CocAction('fold',<f-args>)
" Add `:OR` command for organize imports of the current buffer.
command!-nargs=0OR:call CocAction('runCommand','anizeImport')
" 添加(Neo)Vim的本机状态⾏⽀持。
" NOTE: Please see `:h coc-status`for integrations with external plugins that
" provide custom statusline: lightline.vim, vim-airline.
set statusline^=%{coc#status()}%{get(b:,'coc_current_function','')}
python转java代码
" CoCList的映射
" Show all diagnostics.
nnoremap <silent><nowait><space>a :<C-u>CocList diagnostics<cr>
" Manage extensions.
nnoremap <silent><nowait><space>e :<C-u>CocList extensions<cr>
" Show commands.
nnoremap <silent><nowait><space>c :<C-u>CocList commands<cr>
" Find symbol of current document.
nnoremap <silent><nowait><space>o :<C-u>CocList outline<cr>
" Search workspace symbols.
nnoremap <silent><nowait><space>s :<C-u>CocList -I symbols<cr>
" Do default action for next item.
nnoremap <silent><nowait><space>j :<C-u>CocNext<CR>
" Do default action for previous item.
nnoremap <silent><nowait><space>k :<C-u>CocPrev<CR>
" Resume latest coc list.
nnoremap <silent><nowait><space>p :<C-u>CocListResume<CR>
这些内容源于项⽬主页的demo,我是直接复制过来的,并对注释做了简单的翻译。
⾄此我们的基础环境,总算搭建好了。如果需要实现Java的开发环境还有⼀些路要⾛。安装jdk
既然要搭建Java开发环境,JDK必不可少。这个⼤家应该都轻车熟路了吧。
个⼈建议安装jdk11,其他版本不能保证可以使⽤(最低Java 11是最低要求)。sudo pacman -S jdk11-openjdk
安装coc-java
打开vim 并执⾏:
:CocInstall coc-java
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论