0%

我的简单vim配置:Go后端开发

为什么使用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'
" Tagbar类似于outline, 展示当前文件的函数,变量,类等声明
Plug 'preservim/tagbar'
" 用于插入代码片段
" ultisnips是snippets的管理器
Plug 'SirVer/ultisnips'
" vim-snippets是具体snippets的定义,可添加自己定义的代码片段
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 enable
set t_Co=256
let g:rehash256 = 1
let g:molokai_original = 1
syntax on
set nu ru et
set ts=4 sts=4 sw=4
set cursorline
hi CursorLine term=bold cterm=bold guibg=Grey40
set hlsearch

" vim-go
let g:go_fmt_command = 'goimports'
let g:go_autodetect_gopath = 1
" let g:go_bin_path = '$GOBIN'

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

" Open :GoDeclsDir with ctrl-g
" nmap <C-g> :GoDeclsDir<cr>
" imap <C-g> <esc>:<C-u>GoDeclsDir<cr>

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 END

map <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> "+y
" 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可以呼出终端

  • 终端

参考