为什么使用vim 首先来说,其实不是很建议使用vim作为主力开发环境了,因为现在很好的ide(或者编辑器)有很多.对于go来讲,goland和vscode拥有太多无法替代的好特性.而且很多公司也基于他们开发了很多优秀的插件来帮助开发.比如在字节内部,可以安装bytesuite等优秀的工具来实现远程连接pod来单步调试等功能. 但是开发过程中,还是觉得goland太重太复杂了,内存也占用的很多.本身功能太多,有时候写起来反而思路不是很连续.因此产生了回到VIM开发的念头.
简单但是可用的配置 之前有尝试过spacevim, doom emacs等优秀的开源项目.但是发现他们其实也有着运行缓慢的问题,而且难以维护.所以最后还是采用最简单的VIM配置即可.在日常使用中,常用的功能如下:
函数,变量的定义跳转
简单的自动补全
单元测试的的执行
快捷的命令行操作
文件和文本的搜索
git记录的查询
文件的增删改查
plantuml的绘制和预览
0. 配置go开发环境 1. 安装neovim和vim-plug apt安装neovim.如果是比较老的发行版,比如debian 9,最好还是编译安装neovim.
1 2 sudo apt-get install neovim sudo apt-get install fzf nodejs npm
访问https://github.com/junegunn/vim-plug安装配置vim-plug
2. 编写配置文件 在~/.config/nvim/init.vim
中输入以下内容
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 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 all plug#begin('~/.vim/plugged' )Plug 'arzg/vim-colors-xcode' Plug 'tpope/vim-fugitive' Plug 'scrooloose/nerdtree' Plug 'solarnz/thrift.vim' let mapleader = ',' nnoremap <leader> v :NERDTreeFind<cr> nnoremap <leader> g :NERDTreeToggle<cr> Plug 'vim-airline/vim-airline' Plug 'vim-airline/vim-airline-themes' Plug 'mhinz/vim-startify' Plug 'fatih/molokai' Plug 'junegunn/fzf' , { 'do' : { -> fzf#install() } } Plug 'junegunn/fzf.vim' Plug 'preservim/tagbar' Plug 'SirVer/ultisnips' Plug 'honza/vim-snippets' Plug 'fatih/vim-go' Plug 'neoclide/coc.nvim' , {'branch' : 'release' } Plug 'tpope/vim-commentary' Plug 'voldikss/vim-floaterm' call plug#end()noremap <leader> t :FloatermToggle<CR> noremap! <leader> t <Esc> :FloatermToggle<CR> tnoremap <leader> t <C-\><C-n> :FloatermToggle<CR> syntax enableset t_Co=256 let g:rehash256 = 1 let g:molokai_original = 1 syntax on set nu ru etset ts =4 sts =4 sw =4 set cursorlinehi CursorLine term=bold cterm=bold guibg=Grey40set hlsearchlet g:go_fmt_command = 'goimports' let g:go_autodetect_gopath = 1 let g:go_highlight_types = 1 let g:go_highlight_fields = 1 let g:go_highlight_functions = 1 let g:go_highlight_function_calls = 1 let g:go_highlight_extra_types = 1 let g:go_highlight_generate_tags = 1 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 augroup go autocmd! autocmd BufNewFile,BufRead *.go setlocal noexpandtab tabstop=4 shiftwidth =4 augroup ENDmap <leader> f :Files<CR> map <leader> b :Buffers<CR> let g:fzf_action = { 'ctrl-e' : 'edit' }nmap <C-g> :Ag<cr> set mouse=a noremap <C-C> " noremap <C-V> " +p cnoremap <C-V> <C-r> +imap <C-V> <C-r> +let g:lsp_diagnostics_echo_cursor = 1 colorscheme xcodedark
3. 安装配置插件
打开nvim,输入:PlugInstall安装插件.输入:GoInstallBinaries安装vim-go需要的命令行工具.
配置coc.新建~/.config/nvim/coc-settings.json,并写入如下内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 { "languageserver" : { "golang" : { "command" : "gopls" , "rootPatterns" : [ "go.mod" ], "filetypes" : [ "go" ] } }, "suggest.noselect" : false , "coc.preferences.diagnostic.displayByAle" : true , "suggest.floatEnable" : true }
4. 简单使用
新建项目: go mod init example.com/greetings
打开项目文件夹nvim ./
,可以看到有nerdtree插件生效了.输入m命令,可以新建或者删除文件
输入GoBuild可以编译。输入gd命令可以查看定义
按住,+t
可以呼出终端
参考