neovim 配置

前言

最近纠正完自己的指法后重新捡起了 vim

考虑到自己的需求和刷题的要求,在 idea 和 goland 中均配置了 .ideavimrc

选择 neovim 配置 go 的开发环境

个人向配置,因此略过相关依赖的安装教程,大量参考其他配置

安装

检查

nvim 中输入:checkhealth检查依赖完成度

插件管理器

vim-plug 注意安装的位置

call plug#begin()

call plug#end()
  • 安装插件::PlugInstall
  • 更新插件::PlugUpdate
  • 删除插件::PlugClean (首先在 init.vim 中,注释掉该插件,然后打开 Nvim, 使用 :PlugClean 命令清除该插件)
  • 查看插件状态::PlugStatus
  • 升级 vim-plug::PlugUpgrade

插件

vim-airline

底部状态栏

底部状态栏的主题美化需要配合vim-arilene-themes插件

状态栏主题:let g:airline_theme='themeName'

nerdtree

文件管理器

"==============================================================================
" 项目管理 nerdtree 设置

nnoremap <leader>v :NERDTreeFind<cr>
highlight NERDTreeFile ctermfg=14
nnoremap <leader>g :NERDTreeToggle<cr>

leader+v/g 找到当前文件所在的目录和打开侧边栏目录

gi/gs 目录树中以分割视图打开文件

coc.nvim

代码补全插件

默认路径在~/.config/nvim/coc-settings.json 配置文件添加 golang 相关配置

{
    "languageserver": {
        "golang": {
            "command": "gopls",
            "rootPatterns": [
                "go.mod"
            ],
            "filetypes": [
                "go"
            ]
        }
    },
    "suggest.noselect": false,
    "coc.preferences.diagnostic.displayByAle": true,
    "suggest.floatEnable": true
}

使用ctr+n/p上下移动 回车选择补全代码

init.vim 可选配置

"==============================================================================
" coc.nvim 配置
" Remap keys for gotos
" nmap <silent> gd <Plug>(coc-definition)
nmap <silent> gy <Plug>(coc-type-definition)
nmap <silent> gm <Plug>(coc-implementation)
nmap <silent> gr <Plug>(coc-references)
inoremap <expr> <cr> pumvisible() ? "\<C-y>" : "\<C-g>u\<CR>"

nnoremap <silent> K :call <SID>show_documentation()<CR>
function! s:show_documentation()
  if (index(['vim','help'], &filetype) >= 0)
    execute 'h '.expand('<cword>')
  else
    call CocAction('doHover')
  endif
endfunction
"==============================================================================

ale 代码错误插件

coc-settings.json中关闭 coc的错误处理 "coc.preferences.diagnostic.displayByAle": true

init.vim配置

"==============================================================================
" ale 错误处理配置
let g:ale_set_highlights = 1
let g:ale_set_quickfix = 1
"自定义error和warning图标
let g:ale_sign_error = '✗'
let g:ale_sign_warning = '⚡'
"在vim自带的状态栏中整合ale
let g:ale_statusline_format = ['✗ %d', '⚡ %d', '✔ OK']
"显示Linter名称,出错或警告等相关信息
let g:ale_echo_msg_error_str = 'E'
let g:ale_echo_msg_warning_str = 'W'
let g:ale_echo_msg_format = '[%linter%] %s [%severity%]'
"打开文件时不进行检查
let g:ale_lint_on_enter = 1

"普通模式下,sp前往上一个错误或警告,sn前往下一个错误或警告
nmap sp <Plug>(ale_previous_wrap)
nmap sn <Plug>(ale_next_wrap)
"<Leader>d查看错误或警告的详细信息
nmap <Leader>d :ALEDetail<CR>
let g:ale_linters = {
    \ 'go': ['golint', 'go vet', 'go fmt'],
    \ }
"==============================================================================

使用sn/sp在错误之间跳转

查找 fzf

与本地内 fzf 联动

Plug '/usr/local/opt/fzf'
Plug 'junegunn/fzf.vim'

init.vim配置

map <leader>f :Files<CR>
map <leader>b :Buffers<CR>
let g:fzf_action = { 'ctrl-e': 'edit' }
" 用 leader+ag 搜索当前 cursor 下单词 
nnoremap <silent> <Leader>ag :Ag <C-R><C-W><CR>

直接leader+ag 搜索当前光标下的单词

leader+f 搜索项目内文件

leader+b搜索 buffer 列表切换 ctrl+n/p选择

全局项目搜索::Ag 在项目中查找

others

插件 作用 快捷键
vim-commentary 注释插件 gcc/gc注释当前行/所选代码块
vim-easymotion 快速移动光标 ss nmap 下 ss+目标单词的 2 个字母两次 跳转到显示区域内的首目标单词
vim-surround CRUD{[(“‘ di/da/ci/ca/yi/ya+*
vim-auto-pairs 成对括号
vim-ultisnips+vim-snippets 代码块生成 forr+tab 即可for range
tagbar ctag leader+t显示 tag

总结

不建议直接 copy 巨佬们的配置

尽量了解每个插件的作用和快捷键,避免插件之间的快捷键冲突,在使用中记忆快捷键。

将 IDE 于vim配合使用,项目开发还是 Goland 香。

Reference