golang
开发者在Vim
上贡献了许多成熟的插件。站在巨人的肩膀上,我们可以非常轻松的在Vim
下配置出属于自己的golang
的开发环境。
电脑环境: Mac 10.13 + neovim
实现功能:
- 代码高亮
- 语法检查
- 代码提示
- 一个漂亮的主题
- 快速的启动体验
核心插件:
vim-go、gruvbox、deoplete.nvim、ALE ...
使用Neovim
neovim用起来与vim
完全兼容,但体验上要更好一些,从 Vim 上的迁移成本也很低。
- 使用
brew install neovim
安装neovim
,安装成功后便可以使用nvim
命令来使用了。 - 从
Vim
中迁移,创建~/.config/nvim/init.vim
文件,并写入以下内容:
set runtimepath^=~/.vim runtimepath+=~/.vim/after
let &packpath = &runtimepath
source ~/.vimrc
至此,vim
的配置便迁移成功了。
安装 vim-plug
vim-plug 是一个vim插件管理工具,有了它,我们就可以便捷地管理vim
插件了。
1.安装
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
2.在 .vimrc
,或~/.config/nvim/init.vim
(neovim)中添加插件:
filetype plugin indent on
syntax on
call plug#begin('~/.vim/plugged)
Plug 'fatih/vim-go'
call plug#end()
3.普通模式下使用命令 :PlugInstall
安装插件👋。
安装 vim-go
按照上一步,将vim-go
安装到vim
中,通过:help vim-go.txt
或者到github.com/fatih/vim-go 了解详细的说明。
可以使用<C-x><C-o>
触发补全机制,且一般需要在 .
之后使用。
代码补全插件
deoplete.nvim
安装 deoplete.nvim 可以实现代码实时提示功能。
deoplete 是 neovim/Vim8
的一个异步补全框架。比起 YouCompleteMe
要轻量的多。
并且在开启自动加载时,也没有对启动速度造成太大的影响。
For Plug
if has('nvim')
Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }
else
Plug 'Shougo/deoplete.nvim'
Plug 'roxma/nvim-yarp'
Plug 'roxma/vim-hug-neovim-rpc'
endif
deoplete.nvim
需要 python3
以及 neovim 的 python 模块。
注 检查是否支持 python3
命令:echo has("python3")
输出 1
表示支持。
可以使用下面命令安装所需要的模块.
brew install python3
pip3 install neovim --user
deoplete.nvim 设置
deoplete.nvim
默认使用 <C-p>
、<C-n>
上下选择,根据自己的使用习惯设置使用<TAB>
选择:
let g:deoplete#enable_at_startup = 1
inoremap <expr> <Tab> pumvisible() ? "\<C-n>" : "\<Tab>"
inoremap <expr> <S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>"
inoremap <expr> <cr> pumvisible() ? "\<C-y>" : "\<cr>"
deoplete-go
下面使用deoplete-go
pip2 install --upgrade neovim
pip3 install --upgrade neovim
- 安装 nsf/gocode
go get -u github.com/nsf/gocode
- 安装
deoplete-go
插件,在vim-plug
中加入
Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }
Plug 'zchee/deoplete-go', { 'do': 'make'}
然后执行:PlugInstall
安装。。
- 简单配置
deoplete-go
" deoplete-go settings
let g:deoplete#sources#go#gocode_binary = $GOPATH.'/bin/gocode'
let g:deoplete#sources#go#sort_class = ['package', 'func', 'type', 'var', 'const']
UltiSnips & vim-snippets
使用Sirver/ultisnips
和 honza/vin-snippets
拓展代码片断。
由于deoplete.nvim
已经使用了 <Tab>
进行候选跳转。为了避免冲突,将UltiSnips
快捷键做一些更改:
let g:UltiSnipsExpandTrigger="<leader><tab>"
let g:UltiSnipsJumpForwardTrigger="<tab>"
let g:UltiSnipsJumpBackwardTrigger="<S-tab>"
这样便可以通过<tab>
来选择,<leader><tab>
来触发代码块。
语法检测
ALE 是 neovim/Vim8
的一款异步语法检测的插件,并且支持多种语言。
- 使用
vim-plug
安装
Plug 'w0rp/ale'
- 自定义
let g:ale_sign_error = ''
let g:ale_sign_warning = ''
let g:ale_completion_enabled = 1
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_swift_swiftlint_use_defaults = 1
let g:ale_open_list = 0
let g:ale_lint_delay = 1000
let g:ale_linters = {
\ 'go': ['golint', 'go vet', 'go build'],
\ }
nmap ]a <Plug>(ale_next_wrap)
nmap [a <Plug>(ale_previous_wrap)
gruvbox 主题
gruvbox 是一款比较受欢迎的 Vim
主题,它支持自定义风格,并且实现多种文件类型的语法高亮,并且对许多插件支持。
-
Plug 'morhetz/gruvbox'
-
设置
colorscheme
colorscheme gruvbox
set background=dark
下面就是我Vim
界面了。左右分别是 NERDTree 和 Tagbar 以及底部的 lightline.vim。
并且在我的电脑上可以做到小于 400ms 的启动速度,感觉还是挺不错的。
感兴趣的同学可以到我的vimrc
中查看设置。
附
我的 .vimrc
网友评论
地址的话,放在gist.github.com 上的,可能你需要一些科学上网的方法。