使用VIM作为Go开发的IDE

Posted by Q on Sunday, December 3, 2023

前言

一个好的IDE之于一个程序员,正如一个趁手的兵器之于一个战士。 至于说,什么IDE是最好的IDE,我相信这比“鸡蛋应该从哪头开始打开”这个问题更难,为了不因此引发战争,我们还是暂时先搁置这样的问题吧。 VIM是一款小巧的编辑神器,其迅捷如飞地效率和敏如脱兔地丝滑早已深入人心,如果在开发Go时,能够使用VIM作为IDE,想必也是极好的。

安装和配置

安装iTerm2

iTerm2是一款Mac下的终端模拟器,相比于系统自带的终端,iTerm2有着更多的功能和更好的体验。 移步iTerm2官网下载最新的iTerm2安装包进行安装。

安装VIM

移步官网下载最新的VIM安装包进行安装。

安装VIM插件管理器

VIM插件管理器有很多,比如VIM Plugin、Vundle、Pathogen、NeoBundle等,这里我们选择VIM Plugin。

安装并配置插件

  1. 增加插件

打开~/.vimrc文件,增加以下内容:

" Vim-Go: Go development plugin
Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' }

" NerdTree: File system explorer
Plug 'preservim/nerdtree'

" CtrlP: Fuzzy file finder
Plug 'ctrlpvim/ctrlp.vim'

" Airline: Status/tabline
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'

" solarized color
Plug 'altercation/vim-colors-solarized'
" solarized8 color
Plug 'lifepillar/vim-solarized8'

" Tagbar: Display tags in a window
Plug 'preservim/tagbar'

" ALE: Asynchronous Lint Engine
Plug 'dense-analysis/ale'

" Autocomplete
Plug 'neoclide/coc.nvim', {'branch': 'release'}
  1. 安装插件

在VIM中执行:PlugInstall命令,安装插件。

  1. 配置vim-go

打开~/.vimrc文件,增加以下内容:

let g:go_fmt_command = "goimports"
let g:go_autodetect_gopath = 1
let g:go_list_type = "quickfix"
let g:go_highlight_types = 1
let g:go_highlight_fields = 1
let g:go_highlight_functions = 1
let g:go_highlight_methods = 1
let g:go_highlight_operators = 1
let g:go_highlight_build_constraints = 1
  1. 配置CoC补全工具

打开~/.vimrc文件,增加以下内容:

" Use <Tab> and <S-Tab> to navigate through popup menu
inoremap <silent><expr> <Tab> pumvisible() ? "\<C-n>" : "\<Tab>"
inoremap <silent><expr> <S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>"

" Use K to show documentation in preview window
nnoremap <silent> K :call <SID>show_documentation()<CR>
function! s:show_documentation()
  if (index(['vim', 'help'], &filetype) >= 0)
    execute 'h '.expand('<cword>')
  elseif (coc#rpc#ready())
    call CocActionAsync('doHover')
  else
    execute '!' . &keywordprg . " " . expand('<cword>')
  endif
endfunction
  1. 配置ALE

打开~/.vimrc文件,增加以下内容:

let g:ale_linters = {
\   'go': ['gopls'],
\}
let g:ale_fixers = {
\   'go': ['gofmt', 'goimports'],
\}
let g:ale_go_gopls_options = '-remote=auto'
let g:ale_go_gopls_executable = 'gopls'
  1. 配置语法高亮及主题配色

打开~/.vimrc文件,增加以下内容:

syntax on
set spell
set spelllang=en_us,cjk
set number              " Show line numbers
set relativenumber      " Show relative line numbers
set tabstop=4           " Number of spaces tabs count for
set shiftwidth=4        " Number of spaces to use for autoindent
set expandtab           " Use spaces instead of tabs
set autoindent          " Copy indent from current line when starting a new line
set smartindent         " Auto indent new lines
set background=dark
colorscheme solarized8

" enable 256 color
if (has("termguicolors"))
  set termguicolors
endif

" add additional highlight for go
highlight Comment ctermfg=LightBlue
highlight Identifier ctermfg=Cyan
highlight Function ctermfg=Yellow
highlight Type ctermfg=Green
highlight Constant ctermfg=Magenta
highlight String ctermfg=Red
highlight Statement ctermfg=Blue
highlight PreProc ctermfg=LightMagenta
highlight Special ctermfg=LightGreen

" configure Airline
let g:airline_theme='solarized'
  1. 配置Airline

打开~/.vimrc文件,增加以下内容:

let g:airline_theme='solarized'
let g:airline_powerline_fonts = 1
  1. 配置其他快捷键

打开~/.vimrc文件,增加以下内容:

" function that controls show or not show number
function! ToggleNumber()
  if &number
    set nonumber norelativenumber
  else
    set number relativenumber
  endif
endfunction

" controls to use which theme color
function! ToggleColorscheme()
  if g:colors_name == "solarized8"
    colorscheme solarized
  elseif g:colors_name == "solarized"
    colorscheme solarized8
  else
    colorscheme solarized8
  endif
endfunction

"set shortcut for cancel number
"map <BS> :set nonumber<CR>
nmap <silent> <F1> :NERDTree<CR>
nnoremap <silent> <F2> :call ToggleNumber()<CR>
nnoremap <silent> <F3> :call ToggleColorscheme()<CR>
nnoremap <silent> <F4> :noh<CR>
nnoremap i :noh<CR>i

效果展示

demo

快捷操作

  1. F1:打开/关闭文件树
  2. F2:打开/关闭行号
  3. F3:切换颜色主题
  4. F4:去除搜索出的匹配词的背景突出
  5. :grep xxxx: 在当前目录下查找xxxx字符串
  6. :copen: 打开搜索结果
  7. zg: 将某个拼写检查加入全局词典,从而忽略某个拼写检查

「你的肯定是我不懈前行的动力」

Q先生的世界

你的肯定是我不懈前行的动力

使用微信扫描二维码完成支付