将VIM打造为Go开发利器

平时一般使用VSCode编程,最近为了更好地刷leetcode,又换回了vim。发现笔记本小屏幕 使用vscode zen-mode沉浸式看代码很爽以后,也喜欢上了使用vim写代码, 快捷键方便、稳 定高效、功能纯粹(极简主义)。研究了一番后,发现其可行性,便整理了一下。

主要插件

完整列表

Plug 'scrooloose/nerdtree'
Plug 'preservim/tagbar'
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' }
Plug 'Shougo/ddc.vim'
Plug 'vim-denops/denops.vim'
Plug 'buoto/gotests-vim'
Plug 'SirVer/ultisnips'
Plug 'honza/vim-snippets'

vim-go

vim-go是目前主要且流行的针对go的vim插件,视频[Hacking with Andrew and Brad: an HTTP/2 client] (https://www.youtube.com/watch?v=yG-UaBJXZ80)中两位大佬用vim 进行pair编程使用了就是该插件。

PS: 当时看了这视频后,不禁佩服两位大佬的代码功底,也刷新了使用vim开发实际项目的认知, 原来使用vim写代码 还可以比eclipse/idea/vscode更顺手, 也可以装酷了:》 自己用vim一般也只是用来改改配置,写写简单的脚本,还没尝试过使用它进行正经的项目开发。 虽然以前做过尝试,不过借助vim-go插件和LSP,这成为了真正的可能。

虽然vim-go原作者已不再参与维护该项目,但已交给社区的另外两人负责,仍然在活跃更新 https://arslan.io/2018/10/09/taking-an-indefinite-sabbatical-from-my-projects/

govim是一个有意思的vim插件,它尝试使用go语言编写vim插件.

作为一个后起之秀,它的功能并没有vim-go完善,比如debug功能(这对我来说是一个核心诉求), 从实际使用体验来看,也不如vim-go稳定。从个人角度而言, vim, go我都喜欢,但使用vim script 编写插件应该有更好的兼容性(vim对go的支持还没有那么的好,对lua和python的支持更佳), 所以还是选择vim-go插件。

  • 配置
".vim/after/ftplugin/go.vim                                                                                                                                                  

" shortcut like vscode
nnoremap <buffer> <silent> <F2> :hide GoRename<CR>
nnoremap <buffer> <silent> <F4> :hide GoBuild<CR>
nnoremap <buffer> <silent> <F5> :hide GoDebugStart<CR>
nnoremap <buffer> <silent> <C-F5> :hide GoRun<CR>

nnoremap <buffer> <silent> <S-F11> :hide GoDebugStepOut<CR>
nnoremap <buffer> <silent> <F12> :hide GoDebugStop<CR>

生成测试方法

‘buoto/gotests-vim’

生成测试方法

:GoTests

默认会生成table-driven测试

Snippets

‘honza/vim-snippets’ ‘Shougo/ddc.vim’

浏览

‘scrooloose/nerdtree’ ‘preservim/tagbar’

类似于vscode, ctrl + B打开或关闭文件概览

使用F8打开Tagbar(大纲)

map <C-b> :NERDTreeToggle<CR>
nmap <F8> :TagbarToggle<CR>

安装

常用快捷键

浏览

  • 返回上次位置 Ctrl + O
  • 跳到下一个位置Ctrl + I

https://vim.fandom.com/wiki/Jumping_to_previously_visited_locations

参考