使用Visual Studio Code輔助Go源碼編寫

來源:互聯網
上載者:User
這是一個建立於 的文章,其中的資訊可能已經有所發展或是發生改變。

作為VIMer,日常編碼中,Vim編輯器依然是我的首選。以前以C語言為主要語言的時候是這樣,現在以Go為主要語言時亦是這樣。不過近期發現Mac上使用Vim在編寫Go代碼時,Vim時不時的“抽風”:出現一些“螢幕字元被篡改”的問題,比如下面這幅圖中”func”變成了”fknc”:

雖然一段時間後,顯示會自動校正過來,但這種“篡改”是會讓你產生“幻覺”的。你會想:是不是我真的將”func”寫成”fknc”了呢?久而久之,這個瑕疵將會影響你的編碼效率。至於為何會出現這個問題,初步懷疑可能是因為vim載入較多外掛程式導致的一些效能問題,我在安裝了Ubuntu 16.04的台式機上至今還沒發現這個問題(相同的.vimrc配置)。

於是,我打算找一款輔助編輯器,用於在被上面這個問題折磨得開始“厭惡”Vim的某些時候,切換一下,平複一下心情^0^。我看中了Microsoft開源的Visual Studio Code,簡稱:VSCode。

一、與Microsoft的Visual Studio的淵源

Microsoft做IDE還是很專業的,也是很認真的。大學那時候學C,嫌棄Turbo C太簡陋,基本上都是在D版Visual Studio 6.0上完成各種作業和小程式的製作的。後來在2001年微軟發布了.net戰略,發布了C#語言,同時也發布了Visual Studio .NET IDE。估計我也算是國內第一批使用到Visual Studio.NET IDE的人吧,那時候微軟俱樂部在校園裡免費發送Vs.net beta版光碟片,我拿到了一份,並第一時間體驗了vs.net。Visual Studio .NET與之前的VS 6.0有著天壤之別,功能強大,介面也做了重新設計,支援微軟的各種語言,包括C#、C/C++(包括managed c++)、VB、ASP.net等,並在一年後的正式版發布後,逐漸在傳統型應用程式開發中成為霸主,把那個時候在IDE領域的競爭者Borland公司徹底打垮。但Visual Studio從此也變得更加龐大和臃腫,安裝一個VS,沒有幾個G空間是不行的。想想那個時候機器的配置,跑個VS.net還真是心有而力不足。

工作之後,進入服務端編程領域,結識了Unix、Linux以及Vim、GCC,就再也沒怎麼碰過Visual Studio。隨著工作OS也從Windows切換到Ubuntu,基本就和VS絕緣了。之後隨著Java語言成為企業級應用的主角、Web時代的到來以及開源IDE(比如:Eclipse)的興起,微軟的Visual Studio不再那麼耀眼,或者說是人們對於IDE的關注並不像開發GUI程式那個年代那麼強烈了。但鑒於微軟自身產品體系的龐大,VS始終在市場中佔有一席之地。

而近些年,一些跨平台、輕量級、外掛程式結構、支援智能感知、可隨意定製的文字編輯器的出現,比如:Sublime Text、Atom等讓開發人員喜不自禁。這些編輯器並非定位於IDE,但功能又不輸給IDE很多,尤其在支援編碼、調試這些環節,它們完全可以與專業IDE媲美,但資源消耗卻是像Visual Studio、Eclipse這樣大而全的IDE所無法匹敵的。而Visual Studio Code恰是微軟在這方面的一個嘗試,也是微軟最新公司戰略的體現之一:擁抱所有開發人員(不僅僅是Windows上的哦)。

二、VSCode安裝

VSCode發佈於2015年4月的Build大會上。發布後,迅速得到開發人員響應,大家普遍反映:VSCode效能不錯、關注細節、體驗良好,雖然當時VSCode的外掛程式還不算豐富。一年多過去後,VSCode已經演化到了1.8.1版本(截至2016年12月末),支援所有主流程式設計語言的開發,配套的外掛程式也十分豐富了。VSCode的安裝簡單的很,這一向都是微軟的強項,你可以在其官方站上下載到各個平台的安裝包(Linux平台也有.deb/.rpm兩種包格式供選擇,並提供32bit和64bit兩種版本)。下載後安裝即可。

1、VSCode配置和資料存放區路徑

VSCode安裝後,一般不必關心其配置和資料存放區路徑的位置。但作為有一些Geek精神的developer來說,弄清楚其安裝和配置的來龍去脈還是很有意義的。

在Mac上:

VSCode儲存運行資料和設定檔的目錄在:~/Library/Application Support/Code下:

 ~/Library/Application Support/Code]$lsBackups/        CachedData/        Cookies-journal        Local Storage/        User/Cache/            Cookies            GPUCache/        Preferences        storage.json$ls Userkeybindings.json    locale.json        settings.json        snippets/        workspaceStorage/

在Ubuntu中:

VSCode儲存運行資料和設定檔的目錄在~/.config/Code下面:

~/.config/Code$ lsBackups  Cache  CachedData  Cookies  Cookies-journal  GPUCache  Local Storage  storage.json  User

至於Windows平台,請自行探索^_^。

2、啟動方式

VSCode有兩種啟動方式:案頭啟動和命令列啟動。案頭啟動自不必說了。命令列啟動的樣本如下:

$ code main.go

code命令會開啟一個VSCode視窗並載入命令參數中的檔案內容,這裡是main.go。

三、VSCode的配置

一般來說,VSCode啟動即可用了。但要想發揮出VSCode的能量,我們必須對其進行一番配置。VSCode的配置有幾十上百項,這裡無法全覆蓋,僅說明一下我個人比較關注的。

1、安裝外掛程式

像VSCode這種小清新文字編輯器要想對程式設計語言有很好的支援,必須安裝相應語言的外掛程式。以Go為例,我們至少要安裝vscode-go外掛程式。vscode-go之於VSCode,就好比vim-go之於VIM。並且和vim-go類似,vscode-go實現的各種Features也是依賴諸多已存在的Go周邊工具,包括:

gocode: go get -u -v github.com/nsf/gocodegodef: go get -u -v github.com/rogpeppe/godefgogetdoc: go get -u -v github.com/zmb3/gogetdocgolint: go get -u -v github.com/golang/lint/golintgo-outline: go get -u -v github.com/lukehoban/go-outlinegoreturns: go get -u -v sourcegraph.com/sqs/goreturnsgorename: go get -u -v golang.org/x/tools/cmd/gorenamegopkgs: go get -u -v github.com/tpng/gopkgsgo-symbols: go get -u -v github.com/newhook/go-symbolsguru: go get -u -v golang.org/x/tools/cmd/gurugotests: go get -u -v github.com/cweill/gotests/...

因此,要想實現vscode-go官網頁面中demo中哪些神奇的Feature,你必須將上面的這些依賴工具逐一安裝成功。如果缺少一個依賴工具,VSCode會在視窗右下角的狀態列裡顯示:“Analysis Tools Missing”字樣,以提示你安裝這些工具。

VSCode當然也支援Vim-mode的編輯模式,如果你也和我一樣,喜歡用vim-mode在VSCode中進行編輯,可以安裝VSCodeVim外掛程式。

VSCode的外掛程式安裝方式分為兩種:線上安裝和VSIX方式安裝。

線上安裝,顧名思義,即在VSCode的視窗左側邊欄中點擊“Extensions”按鈕,在開啟的Extensions搜尋方塊中搜尋你想要的外掛程式名稱,或者選擇預製的條件獲得外掛程式資訊。選中你要安裝的外掛程式,點擊“Install”按鈕即可完成安裝。

VSIX安裝:即到外掛程式官網將外掛程式檔案下載到本地(外掛程式安裝檔案一般以.vsix或.zip結尾),在視窗中選擇:”Install from VSIX…”,選擇你下載的外掛程式檔案即可。

安裝後的外掛程式都被放在~/.vscode/extensions目錄下(mac和linux)。

2、更改語言設定

VSCode在初次啟動時會判斷當前系統語言,並以相應的語言作為預設視窗顯示語言。比如:我的是中文OS X系統,那麼預設VSCode的視窗文字都是中文。如果我要將其改為英文,應該如何操作呢?

F1登場!這裡的F1可不是賽車比賽,而是快速鍵F1,估計也是整個VSCode最常用的快速鍵之一了。敲擊F1後,VSCode會顯示其“Command Palette”輸入框,這裡麵包含了當前VSCode可以執行的所有操作命令,支援Search。我們輸入”language”,在搜尋結果中選擇“Configure Language”,VSCode開啟一個新的編輯視窗,載入~/Library/Application Support/Code/User/locale.json檔案:

{    // 定義 VSCode 的顯示語言。    // 請參閱 https://go.microsoft.com/fwlink/?LinkId=761051,瞭解支援的語言列表。    // 要更改值需要重啟 VSCode。    "locale": "zh-cn"}

當前語言為中文,如果我們要將其改為英文,則修改該檔案中的”locale”項:

{    // 定義 VSCode 的顯示語言。    // 請參閱 https://go.microsoft.com/fwlink/?LinkId=761051,瞭解支援的語言列表。    // 要更改值需要重啟 VSCode。    "locale": "en-US"}

儲存,重啟VSCode。再次啟動的VSCode將會以英文介面示人了。

3、User Settings和Workspace Settings

UserSettings是一種“全域”設定,而Workspace Settings則顧名思義,是一種針對一個特定目錄或project的設定。

UserSettings設定後的資料儲存在~/Library/Application Support/Code下(以mac為例),而Workspace Setting設定後的資料則儲存在某個項目特定目錄下的.vscode目錄下。

在功能表列,選擇【Preferences -> User Settings】可以開啟~/Library/Application Support/Code/User/settings.json檔案。預設情況下,該檔案為空白。VSCode採用預設設定。如果你要個人化,那麼可將對應的配置項copy一份到settings.json中,並賦予其新值,儲存即可。新值將覆蓋預設值。以字型大小為例,我們將預設的editor.fontSize 12改為10:

// Place your settings in this file to overwrite the default settings{    "editor.fontSize": 10,}

儲存後,可以看到視窗中所有文字的Size都變小了。

在功能表列,選擇【Preferences -> Workspace Settings】可開啟當前工作目錄下的.vscode的settings.json檔案,其工作原理和配置方法與User Settings一樣,只是生效範圍僅限於該工作區範疇。

4、Color Theme

VSCode內建了主流的色彩配置,比如:monokai、solarized dark/light等。F1,輸入”color”搜尋,選擇:“Perefences: Color Theme”(在MAC上也可以用cmd+k, cmd+t開啟),在下拉式清單中選擇你喜歡的配色Theme即可,即可生效。

四、vscode-go的使用

前面說過,和vim-go一樣,vscode-go外掛程式實現了Go編碼中需要的各種功能:自動format、自動增刪import、build on save、lint on save、定義跳轉、原型資訊快速提示、自動補全、code snippets等。另外它通過帶顏色的波浪線提示代碼問題(雖然有時候反應有點慢),包括文法問題、不符合idiomatic go規則的問題(比如appId這個命名,它會建議你改為appID)等。

code snippets非常好用,內建的code snippets在~/.vscode/extensions/lukehoban.Go-0.6.51/snippets/go.json中可以找到,類似這樣的定義:

//~/.vscode/extensions/lukehoban.Go-0.6.51/snippets/go.json{        ".source.go": {                "single import": {                        "prefix": "im",                        "body": "import \"${1:package}\""                },                "multiple imports": {                        "prefix": "ims",                        "body": "import (\n\t\"${1:package}\"\n)"                },                "single constant": {                        "prefix": "co",                        "body": "const ${1:name} = ${2:value}"                },                "multiple constants": {                        "prefix": "cos",                        "body": "const (\n\t${1:name} = ${2:value}\n)"                },                "type interface declaration": {                        "prefix": "tyi",                        "body": "type ${1:name} interface {\n\t$0\n}"                },                "type struct declaration": {                        "prefix": "tys",                        "body": "type ${1:name} struct {\n\t$0\n}"                },                "package main and main function": {                        "prefix": "pkgm",                        "body": "package main\n\nfunc main() {\n\t$0\n}"                },... ...

敲入”prefix”的值,比如”ims”,輸入tab,vscode-go將為你展開為:

import (    "package")

在使用vscode時遇到過一次代碼自動補全“失靈”的問題。vscode-go只會提示:”PANIC,PANIC,PANIC”。經查,這個是gocode daemon的問題,我的解決方案是:

gocode close //關閉gocode daemongocode -s &  //重啟之。

五、小結

在諸多輕量級編輯器中,我還是比較看好vscode的,畢竟其背後有著Microsoft積澱多年的IDE產品開發經驗。並且和Microsoft以往產品最大的不同就是其是開源項目。

關於Vscode的使用和奇技淫巧可以參見其官方的這篇文檔“VS Code Tips and Tricks”。

關於Vscode的各種周邊工具和資料列表,請參考Awesome-vscode項目。

快速鍵往往是開發人員的最愛,VSCode官方製作了三個平台的VSCode的快速鍵worksheet:

https://code.visualstudio.com/shortcuts/keyboard-shortcuts-windows.pdf

https://code.visualstudio.com/shortcuts/keyboard-shortcuts-macos.pdf

https://code.visualstudio.com/shortcuts/keyboard-shortcuts-linux.pdf

VSCode還在快速發展,離完善還有不小提升空間。比如:在使用過程中也發現了VSCode 視窗無響應或代碼編輯錯亂之情況。不過作為Go編碼的一個輔助編輯器,VSCode還是完全勝任和超出預期的。

2016, bigwhite. 著作權.

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.