1. 程式人生 > >Golang開發環境搭建-Vim篇

Golang開發環境搭建-Vim篇

雖說sublimetext3+gosublime+gocode是目前較為 流行的Golang開發環境組合,但作為一名VIMer,沒有一套得心應手的Vim for Golang dev心裡總是過不去的。Golang雖然年輕,但即便是從Go 1版本釋出(2012年3月28日)算起,掐指算來也有小三年了。全世界的開發者已經為Golang貢獻了較為成熟的Vim外掛了。有了這些外掛,搭建出 一套高效的Golang開發環境還是不難的,網上也有大量的資料可以參考,其中就有vim-go作者自己發表的一篇文章《Go development environment for Vim》。不過看別人 寫的與自己搭建體驗的還是有大不同的,於是想來想去還是把整個過程記錄下來。

一、一個乾淨的環境

找個乾淨的基礎環境,方便確認每個搭建步驟後的效果:

Ubuntu 14.04 x86_64
vim version 7.4.52
go version go1.4beta1 linux/amd64

再準備一個編輯Go原始碼的測試原始檔:

//hellogolang.go

package main

import “fmt”

func main() {
fmt.Println(“Hello Golang!”)
}

用於驗證每個搭建步驟後的變化。

二、嚴格按照vim-go的官方說明逐一搭建

Vim-go是當前使用最為廣泛的用於搭建Golang開發環境的vim外掛,這裡我同樣使用vim-go作為核心和基礎進行環境搭建的。vim-go利 用開源Vim外掛管理器安裝,gmarik/Vundle.vim是目前被推薦次數更多的Vim外掛管理器,超過了pathogen。這裡我們 就用vundle來作為Vim的外掛管理工具。

1、安裝Vundle.vim

Vundle.vim的安裝步驟如下:

建立~/.vimrc檔案(如果你沒有這個檔案的話),在檔案頂部新增有關Vundle.vim的配置:

set nocompatible ” be iMproved, required
filetype off ” required

” set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

” let Vundle manage Vundle, required
Plugin ‘gmarik/Vundle.vim’

” All of your Plugins must be added before the following line
call vundle#end() ” required
filetype plugin indent on ” required

此時Vim僅安裝了Vundle.vim這一個外掛。編輯hellogolang.go時與編輯普通文字檔案無異,一切都還是Vim的預設屬性。

2、安裝Vim-go

編輯~/.vimrc,在vundle#begin和vundle#end間增加一行:

Plugin ‘fatih/vim-go’

在Vim內執行 :P luginInstall,

Vundle.vim會在左側開啟一個Vundle Installer Preview子視窗,視窗下方會提示:“Processing ‘fatih/vim-go’”,待安裝完畢後,提示資訊變 成“Done!”。

這時,我們可以看到.vim/bundle下多了一個vim-go資料夾:

$ ls .vim/bundle/
vim-go/ Vundle.vim/

此時,再次編輯hellogolang.go,語法高亮有了, 儲存時自動format(利用$GOBIN/gofmt)也有了,但其他高階功能,比如自動import缺失的 package、自動補齊仍然沒有,我們還要繼續安裝一些東東。

3、安裝go.tools Binaries

vim-go安裝說明中提到所有必要的binary需要先安裝好,比如gocode、godef、goimports等。

通過:GoInstallBinaries,這些vim-go依賴的二進位制工具將會自動被下載,並被安裝到GOBINGOPATH/bin下。(這個工具需要依賴git或hg,需要提前安裝到你的OS中。)

:GoInstallBinaries的執行是互動式的,你需要回車確認:

vim-go: gocode not found. Installing github.com/nsf/gocode to folder /home/tonybai/go/bin
vim-go: goimports not found. Installing code.google.com/p/go.tools/cmd/goimports to folder /home/tonybai/go/bin/
vim-go: godef not found. Installing code.google.com/p/rog-go/exp/cmd/godef to folder /home/tonybai/go/bin/
vim-go: oracle not found. Installing code.google.com/p/go.tools/cmd/oracle to folder /home/tonybai/go/bin/
vim-go: gorename not found. Installing code.google.com/p/go.tools/cmd/gorename to folder /home/tonybai/go/bin/
vim-go: golint not found. Installing github.com/golang/lint/golint to folder /home/tonybai/go/bin/
vim-go: errcheck not found. Installing github.com/kisielk/errcheck to folder /home/tonybai/go/bin/

不過這些程式碼多在code.google.com上託管,因此由於眾所周知的原因,vim-go的自動安裝很可能以失敗告終,這樣就需要你根據上 面日誌中提到的各個工具的原始碼地址逐一去下載並本地安裝。無法搭梯子的,可以通過http://gopm.io 下載相關包。

安裝後,$GOBIN下的新增Binaries如下:
-rwxr-xr-x 1 tonybai tonybai 5735552 11?? 7 11:03 errcheck*
-rwxr-xr-x 1 tonybai tonybai 9951008 11?? 7 10:33 gocode*
-rwxr-xr-x 1 tonybai tonybai 5742800 11?? 7 11:07 godef*
-rwxr-xr-x 1 tonybai tonybai 4994120 11?? 7 11:00 goimports*
-rwxr-xr-x 1 tonybai tonybai 5750152 11?? 7 11:03 golint*
-rwxr-xr-x 1 tonybai tonybai 6381832 11?? 7 11:01 gorename*
-rwxr-xr-x 1 tonybai tonybai 2954392 11?? 7 10:38 gotags*
-rwxr-xr-x 1 tonybai tonybai 9222856 11?? 7 11:01 oracle*

安裝好這些Binaries後,我們來看看哪些特性被支援了。

再次編輯hellogolang.go:

     - 新起一行輸入fmt.,然後ctrl+x, ctrl+o,Vim 會彈出補齊提示下拉框,不過並非實時跟隨的那種補齊,這個補齊是由gocode提供的。
– 輸入一行程式碼:time.Sleep(time.Second),執行:GoImports,Vim會自動匯入time包。
– 將游標移到Sleep函式上,執行:GoDef或命令模式下敲入gd,Vim會開啟$GOROOT/src/time/sleep.go中 的Sleep函式的定義。執行:b 1返回到hellogolang.go。
– 執行:GoLint,執行golint在當前Go原始檔上。
– 執行:GoDoc,開啟當前游標對應符號的Go文件。
– 執行:GoVet,在當前目錄下執行go vet在當前Go原始檔上。
– 執行:GoRun,編譯運行當前main package。
– 執行:GoBuild,編譯當前包,這取決於你的原始檔,GoBuild不產生結果檔案。
– 執行:GoInstall,安裝當前包。
– 執行:GoTest,測試你當前路徑下地_test.go檔案。
– 執行:GoCoverage,建立一個測試覆蓋結果檔案,並開啟瀏覽器展示當前包的情況。
– 執行:GoErrCheck,檢查當前包種可能的未捕獲的errors。
– 執行:GoFiles,顯示當前包對應的原始檔列表。
– 執行:GoDeps,顯示當前包的依賴包列表。
– 執行:GoImplements,顯示當前型別實現的interface列表。
– 執行:GoRename [to],將當前游標下的符號替換為[to]。

三、其他外掛

到目前為止,我們還有若干特性沒能實現,重點是:

– 實時跟隨的程式碼補齊
– Code Snippet support

1、安裝YCM(Your Complete Me)

在~/.vimrc中新增一行:

Plugin ‘Valloric/YouCompleteMe’

儲存退出後,再開啟~/.vimrc並執行 :P luginInstall。

安裝完後,下面的提示欄提示:

ycm_client_support.[so|pyd|dll] and ycm_core.[so|pyd|dll] not detected; you need to compile YCM before using it. Read the docs!

似乎YCM是用了C++編寫的模組對效能進行優化了,於是需要手工編譯YCM的support庫。步驟如下:

sudo apt-get install build-essential cmake python-dev
cd ~/.vim/bundle/YouCompleteMe
./install.sh

構建(編譯C++很慢,需要耐心的等一會)ok後,再開啟hellogolang.go,逐字的實時補全功能就具備了!Cool!

2、安裝 UltiSnips

Vim-go預設是用ultisnips引擎外掛,但這個外掛需要單獨安裝。

同樣,我們利用vundle來安裝它,在~/.vimrc中新增一行:

Plugin ‘SirVer/ultisnips’

snippet和snippet引擎是分開的。ultisnips是引擎,vim-go的go snippet定義在這裡

編輯hellogolang.go,按照go.snip中的說明,我們輸入func後敲擊tab鍵,我們發現期待的:

func name(params) type {

}

並沒有出現。反倒是YCM的下拉提示顯示在那裡讓你選擇。似乎是ultisnips和YCM的鍵組合衝突了。ultisnips官方說明也的確如 此。ultisnips預設是用Tab展開snippet的,而YCM中的Tab用來選擇補齊項,我們可以通過設定來避免這些。

我們在.vimrc中新增如下setting:

” YCM settings
let g:ycm_key_list_select_completion = [”, ”]
let g:ycm_key_list_previous_completion = [”]
let g:ycm_key_invoke_completion = ‘’

” UltiSnips setting
let g:UltiSnipsExpandTrigger=””
let g:UltiSnipsJumpForwardTrigger=””
let g:UltiSnipsJumpBackwardTrigger=””

這樣讓YCM通過回車和向下的箭頭來做list item正向選擇,通過向上箭頭做反向選擇。通過ctrl+space來原地觸發補齊提示。

而ultisnips則是用tab做snippet展開,ctrl+b正向切換佔位符,ctrl+z反向切換佔位符。

3、安裝molokai theme

Molokai theme是TextMate的theme的vim port,看著截圖挺不錯的,於是也安裝了一下。

mkdir ~/.vim/colors
下載或copy https://github.com /fatih/molokai/blob/master/colors/molokai.vim到~/.vim /colors目錄下
在.vimrc新增一行:colorscheme molokai

四、.vimrc

前面講到了vim-go有許多命令,在:xx模式下執行多顯不便,於是你可以定義一些Mappings,比如:

” set mapleader
let mapleader = “,”

” vim-go custom mappings
au FileType go nmap s (go-implements)
au FileType go nmap i (go-info)
au FileType go nmap gd (go-doc)
au FileType go nmap gv (go-doc-vertical)
au FileType go nmap r (go-run)
au FileType go nmap b (go-build)
au FileType go nmap t (go-test)
au FileType go nmap c (go-coverage)
au FileType go nmap ds (go-def-split)
au FileType go nmap dv (go-def-vertical)
au FileType go nmap dt (go-def-tab)
au FileType go nmap e (go-rename)

這樣我們在命令模式下,輸入<,>+就是執行 當前main包,以此類推。

另外下面這個配置使得我們在save file時既可以格式化程式碼,又可以自動插入包匯入語句(或刪除不用的包匯入語句)。

” vim-go settings
let g:go_fmt_command = “goimports”

到這裡,我們的Vim Golang開發環境就基本搭建好了。snippet+實時補齊讓你Coding如飛!

五、附錄:.vimrc檔案

下面是截至目前為止全量.vimrc檔案的內容:

set nocompatible ” be iMproved, required
filetype off ” required
colorscheme molokai

” set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

” let Vundle manage Vundle, required
Plugin ‘gmarik/Vundle.vim’
Plugin ‘fatih/vim-go’
Plugin ‘Valloric/YouCompleteMe’

Plugin ‘SirVer/ultisnips’

” All of your Plugins must be added before the following line
call vundle#end() ” required
filetype plugin indent on ” required

” set mapleader
let mapleader = “,”

” vim-go custom mappings
au FileType go nmap s (go-implements)
au FileType go nmap i (go-info)
au FileType go nmap gd (go-doc)
au FileType go nmap gv (go-doc-vertical)
au FileType go nmap r (go-run)
au FileType go nmap b (go-build)
au FileType go nmap t (go-test)
au FileType go nmap c (go-coverage)
au FileType go nmap ds (go-def-split)
au FileType go nmap dv (go-def-vertical)
au FileType go nmap dt (go-def-tab)
au FileType go nmap e (go-rename)

” vim-go settings
let g:go_fmt_command = “goimports”

” YCM settings
let g:ycm_key_list_select_completion = [”, ”]
let g:ycm_key_list_previous_completion = [”, ”]
let g:ycm_key_invoke_completion = ‘’

” UltiSnips settings
let g:UltiSnipsExpandTrigger=””
let g:UltiSnipsJumpForwardTrigger=””
let g:UltiSnipsJumpBackwardTrigger=””

六、Mac OS X下Vim配置

1、MacVim替換

Mac OS X下的配置方法稍有不同,因為Mac下系統自帶的Vim是7.3版本,YCM要求Vim 7.3.584+版本,因此我們需要安裝MacVim以替代自帶的Vim,目前MacVim最新版本是version 7.4.258,完全滿足要求。在這裡https://github.com/b4winckler/macvim/releases可以下載到最新的MacVim,下載後的MacVim可以通過如下步驟替換原Vim。

原Vim安裝到/usr/bin/vim下。

MacVim解壓後如下:

[[email protected] ~/Downloads/MacVim-snapshot-73]$ls
MacVim.app/ README.txt mvim*

我們執行以下步驟即可完成vim替換工作:

sudo mv /usr/bin/vim /usr/bin/vim.bak //備份一下原vim
cp mvim /usr/local/bin/
sudo ln -s /usr/local/bin/mvim /usr/bin/vim

2、外掛安裝和配置

按照上面Linux Vim的外掛安裝步驟和配置方法我們來配置MacVim,配置後,我們發現除了molokai的colorscheme沒有生效外,其餘外掛工作均正常。而所有.go檔案開啟,均無molokai方案的顏色高亮,甚至連一般的顏色高亮都沒有了。經過不斷除錯,發現了一個解決方法,在~/.vimrc中新增幾行程式碼即可:

syntax on
au BufRead,BufNewFile *.go set filetype=go
colorscheme molokai

但這幾行配置程式碼如果放在~/.vimrc的前面,則UltiSnips會無法工作,我將其移到~/.vimrc檔案的末尾,這樣就不存在衝突了(看來.vimrc的外掛配置的先後順序會對外掛功能的正常使用有影響)。漂亮的molokai colorscheme也會展現出來

相關推薦

Golang開發環境搭建-Vim

雖說sublimetext3+gosublime+gocode是目前較為 流行的Golang開發環境組合,但作為一名VIMer,沒有一套得心應手的Vim for Golang dev心裡總是過不去的。Golang雖然年輕,但即便是從Go 1版本釋出(2012年3

windows下golang開發環境搭建(Eclipse

1.go語言環境安裝 下載地址:https://golang.org/dl/ 找windows下面的msi檔案下載安裝即可。注意位數喲~ 安裝完這個你就可以在命令列下面執行go程式啦:go run test.go package main import ( "fmt" ) fu

Linux下golang開發環境搭建

str windows div lec ola jos bin 工具庫 vscode 對於golang開發來說,Windows下可以用vscode或者liteide都不錯,但是Linux下的開發也就只有vim了,所以怎麽搞笑的利用vim進行golang開發呢? 參考官方推

VS code golang 開發環境搭建

pac 遠程服務 println gop vs code 空間 go 安裝 beta out 安裝go (1)下載go安裝程序 下載地址:https://golang.org/dl/ (墻內下載地址http://www.golangtc.com/downlo

GOLang開發環境搭建(Windows)

我的作業系統:Windows 10 家庭中文版,x86架構,64位作業系統 安裝go windows上安裝軟體總是很簡單的,go安裝流程也不例外: 從Go 安裝包下載下載對應的安裝包,我的系統選擇:go1.10.3.windows-amd64.m

微信公眾號開發環境搭建拓展(Git)

        上一篇講到了新浪雲應用,現在我們來講講裡面的一些好用好玩的東西。         博主會以實踐中的過程來講,目的為了使博主自己對這些有趣的東西加深映象;這也是小白級別的,所以各路大神請

Eclipse + Golang 開發環境搭建 (要點備忘)

安裝步驟 官網下載Golang,安裝 官網下載eclipse,安裝 除錯需要安裝gdb 比較方便的方法是,官網下載安裝 liteide,拷貝其bin下gdb.exe gdb64.exe到go目錄bin下 Eclipse Golang環境配置 點選

windows golang開發環境搭建--LiteIDE-最適合Go的IDE

liteide 下載地址 https://code.google.com/archive/redirect/a/code.google.com/p/golangide?movedTo=https:%2F%2Fsourceforge.net%2Fprojects%2Flite

Web開發環境搭建 Eclipse-Java EE

選擇 進入 XP glass The 代碼 ans download 圖片 Web開發環境搭建 Eclipse-Java EE 篇 【原創內容,轉載註名出處】 1. 下載和安裝 1.1 下載JDK 在Java官方網站下載最新版本的 Java SE: http://www.

第1:Java開發環境搭建

這裡僅以windows為例 1. 下載安裝JDK 下載地址:https://www.oracle.com/technetwork/java/javase/downloads/index.html 2. 配置環境變數 右鍵 “我的電腦” --> 屬性 --

[基礎]ESP8266-NonOS學習筆記(一)之開發環境搭建

上篇文章我們瞭解了ESP8266到底是個什麼“東西”,瞭解了ESP8266在這個萬物互聯時代有哪些優勢,那我們不能光是瞭解,我們還需要去深入的學習一下,爭做物聯網時代的弄潮兒~繼往開來第二篇,本篇文章主要介紹一下幾種常見的ESP8266開發方式,感覺現在不管是學習硬體開發還是軟體開發,第一節課都是先學習一下開

Eclipse和PyDev搭建完美Python開發環境(Windows

安裝Python 從網站上下載最新的版本,從http://python.org/download/下載。安裝過程與其他Windows軟體類似。這裡使用python2.7.6 在Windows命令列中使用Python 如果你想要從Windows命令列呼叫Python,那麼需要

ESP32系列教程:《入門:ESP32開發環境搭建》--Windows下使用VScode搭建ESP32開發環境

github地址:https://github.com/xiaolongba/wireless-tech 如何搭建ESP32開發環境 前言 ESP32是樂鑫在其上一代ESP8266一炮而紅之後,推出的第二代高性價比的產品,ESP32在上一代的基礎上增加了藍芽4.2的功能,加上

學習TP5(前提):基於PHP的專案開發環境搭建

前言 之前我寫一個TP5框架快速上手的文章,如果你想快速上手TP5框架的話,可以看一下。這篇來聊一聊用TP5框架或者說用PHP來寫後端專案需要在部署哪些環境,還要需要準備哪些軟體。(方法不唯一) 需

windows7 下搭建golang開發環境

一、golang的安裝和環境變數的設定 1、golang安裝包下載和安裝 到golang官網下載最新版的安裝包go1.6.3.windows-amd64.msi,下載之後直接執行安裝,安裝路徑就使用它

Windows下visual studio code搭建golang開發環境

前言 其實環境搭建沒什麼難的,但是遇到一些問題,主要是有些網站資源訪問不了(如:golang.org), 導致一些包無法安裝,最終會導致環境搭建失敗,跟據這個教程幾步,我們將可以快速的構建golang的開發環境。 開發環境: 一、安裝 這裡我用需要安裝一些工具: 這裡我使用的是Go

ESP32系列教程:《入門:ESP32開發環境搭建優化》,windows下開發速度堪比Linux

github教程地址: 優化一:https://github.com/xiaolongba/wireless-tech/blob/master/%E8%BD%AF%E4%BB%B6/%E7%BA%A2%E6%97%AD%E6%97%A0%E7%BA%BF%E5%BC%80%E5%8F%91%

深度學習開發環境搭建教程(Mac

本文將指導你如何在自己的Mac上部署Theano + Keras的深度學習開發環境。 如果你的Mac不自帶NVIDIA的獨立顯示卡(例如15寸以下或者17年新款的Macbook。具體可以在“關於本機->系統報告->圖形卡/顯示器”裡檢視),那麼你可能無法在這臺Mac上使用GPU訓練深度學習模型。不

python多行註釋 && Eclipse和PyDev搭建完美Python開發環境(Ubuntu

python本身不帶多行註釋,編輯時每行敲一個“#”相當的不方便,其實可以有變通的方法 1. 把要註釋的塊用if 0:包起來,需要注意縮排 2. 把要註釋的塊用'''    '''包起來,也需要注意縮排。不過一般情況下'''是用來做function doc的,所以

大資料入門之開發環境搭建之hadoop

這篇教程我將會教大家如何一步步從零開始搭建好我們的大資料完全分散式實驗平臺 實驗環境:1.由於實驗環境是在linux系統中,所以我們需要用虛擬機器摸擬linux作業系統,作業系統的版本我們選 centOS 7,需要建立的虛擬機器的臺數根據自己的電腦的配置來決定,一般為了較好