golang
開發(fā)者在Vim
上貢獻(xiàn)了許多成熟的插件关噪。站在巨人的肩膀上昭伸,我們可以非常輕松的在Vim
下配置出屬于自己的golang
的開發(fā)環(huán)境适秩。
電腦環(huán)境: Mac 10.13 + neovim
實(shí)現(xiàn)功能:
- 代碼高亮
- 語(yǔ)法檢查
- 代碼提示
- 一個(gè)漂亮的主題
- 快速的啟動(dòng)體驗(yàn)
核心插件:
vim-go巍佑、gruvbox、deoplete.nvim孔飒、ALE ...
使用Neovim
neovim用起來(lái)與vim
完全兼容灌闺,但體驗(yàn)上要更好一些艰争,從 Vim 上的遷移成本也很低。
- 使用
brew install neovim
安裝neovim
,安裝成功后便可以使用nvim
命令來(lái)使用了桂对。 - 從
Vim
中遷移,創(chuàng)建~/.config/nvim/init.vim
文件甩卓,并寫入以下內(nèi)容:
set runtimepath^=~/.vim runtimepath+=~/.vim/after
let &packpath = &runtimepath
source ~/.vimrc
至此,vim
的配置便遷移成功了蕉斜。
安裝 vim-plug
vim-plug 是一個(gè)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 了解詳細(xì)的說明。
可以使用<C-x><C-o>
觸發(fā)補(bǔ)全機(jī)制侣诵,且一般需要在 .
之后使用痢法。
代碼補(bǔ)全插件
deoplete.nvim
安裝 deoplete.nvim 可以實(shí)現(xiàn)代碼實(shí)時(shí)提示功能狱窘。
deoplete 是 neovim/Vim8
的一個(gè)異步補(bǔ)全框架杜顺。比起 YouCompleteMe
要輕量的多。
并且在開啟自動(dòng)加載時(shí)蘸炸,也沒有對(duì)啟動(dòng)速度造成太大的影響躬络。
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 設(shè)置
deoplete.nvim
默認(rèn)使用 <C-p>
穷当、<C-n>
上下選擇,根據(jù)自己的使用習(xí)慣設(shè)置使用<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'}
然后執(zhí)行:PlugInstall
安裝淹禾。馁菜。
- 簡(jiǎn)單配置
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
已經(jīng)使用了 <Tab>
進(jìn)行候選跳轉(zhuǎn)铃岔。為了避免沖突汪疮,將UltiSnips
快捷鍵做一些更改:
let g:UltiSnipsExpandTrigger="<leader><tab>"
let g:UltiSnipsJumpForwardTrigger="<tab>"
let g:UltiSnipsJumpBackwardTrigger="<S-tab>"
這樣便可以通過<tab>
來(lái)選擇,<leader><tab>
來(lái)觸發(fā)代碼塊毁习。
語(yǔ)法檢測(cè)
ALE 是 neovim/Vim8
的一款異步語(yǔ)法檢測(cè)的插件智嚷,并且支持多種語(yǔ)言。
- 使用
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
主題纺且,它支持自定義風(fēng)格盏道,并且實(shí)現(xiàn)多種文件類型的語(yǔ)法高亮,并且對(duì)許多插件支持载碌。
Plug 'morhetz/gruvbox'
設(shè)置
colorscheme
colorscheme gruvbox
set background=dark
下面就是我Vim
界面了猜嘱。左右分別是 NERDTree 和 Tagbar 以及底部的 lightline.vim衅枫。
并且在我的電腦上可以做到小于 400ms 的啟動(dòng)速度,感覺還是挺不錯(cuò)的泉坐。
感興趣的同學(xué)可以到我的vimrc
中查看設(shè)置为鳄。
附
我的 .vimrc