在 MAC 上安裝、使用 govim 就是那麼樸實無華 | Piece of DevOps

在各式各樣炫爛華麗的 IDE 如雨後春筍般出現後,Vim 的確不太容易排在開發者選擇名單的前面。但 Vim 也是有難以取代的地方,像是我個人特別喜歡能用鍵盤解決一切的感覺。會想使用 Vim 來開發 Golang,除了因為目前開發的程式都不大、想學會用鍵盤控制一切,對我來說最重要的原因就是「潮」。即使用來寫國小文章,也會讓人不明覺厲。

雖然說是用 Vim 來開發 Golang,但這並不代表需要完全土炮一切,因為 Vim 的世界其實是相當有趣的,有各種 Plugin 能優化開發的過程,甚至還能產生類似 GUI 的相關提示。今天要介紹的 govim 就是專為開發 Golang 所使用的 Vim Plugin。

安裝 govim

安裝 govim 的方式在 Github 上有提供 4 種,這邊介紹的是使用 Vim 8 packages 的方式。需要留意的是,安裝 govim 需要 Golang 本版至少為 1.12,Vim 本版至少是 v8.1.1711。有了 brew 的幫助,要達到這兩項要求,其實並不難。

使用 brew 安裝 Golang

目前(2020/04/19)用 brew 直接安裝 Golang 的版本為 1.14.2_1,所以在使用 brew 情況下,只要輕鬆的一行即可達到要求。
$ brew install go
如果已經用 brew 安裝過 Golang 的話呢?則只要使用 brew upgrade 即可將 Golang 的本版更新至 brew 所提供的最新版本:
$ brew upgrade go

使用 brew 安裝 vim

目前(2020/04/19)用 brew 直接安裝的 Vim 版本為 8.2,也是高於需求的版本。所以也是直接安裝即可。
$ brew install vim
安裝的過程中,brew 可能會報一些錯誤,需要再下一些指令,或者需要更新 Xcode。遇到這些問題時,brew 都會詳細說明解決方式,基本上,只要照著做就可以解決。唯一比較麻煩的是,我們需要讓新 Vim 蓋過舊的。這時候我們可以使用 brew link 來幫助我們讓原先的 vim ,產生連結至新版本的 vim 執行檔。
$ brew link vim
此時可能會遇到以下得錯誤訊息:
Error: The `brew link` step did not complete successfully
The formula built, but is not symlinked into /usr/local
Could not symlink share/man/de/man1/nmap.1
/usr/local/share/man/de/man1 is not writable.
會出現會出現這樣的訊息,可能是因為之前在安裝套件時,改到目錄下的使用者權限(例如使用 sudo 安裝套件)。此時,只需要重新賦予當前使用者權限即可:
sudo chown -R `whoami`:admin /usr/local/share/man/de/man1
現在,我們可以使用 vim -version 來確認目前的 Vim 版本:
$ vim -version
VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Apr 14 2020 23:43:46)
...
現在我們的 Vim 也符合需求了,那就來安裝 govim 吧!

安裝 govim

到了這一步,因為我們已經安裝了 Vim 8,所以在安裝 govim 上,相對輕鬆很多。在這裡,我們直接使用 Vim 8 packages 的機制來安裝,只需要一行指令即可:
$ git clone https://github.com/govim/govim.git ~/.vim/pack/plugins/start/govim
就是那麼簡單!

一些好用的功能

以下將介紹 govim 好用的功能,分別為:
  • Hover information
  • Code completion
  • Quickfix diagnostics
其他好用的功能, govim 的 Github 都有介紹,如果想多瞭解,可以直接點傳送門

Hover information

此功能可以顯示指定函數的相關資訊。GitHub 是寫,只要將滑鼠移到指定函數上,即可顯示。但在我的環境下,無法成功試出此功能(可能是少開啟 Vim 的某些功能,在此並沒有深究)。雖然沒辦法用滑鼠達成,但其實可以透過設定快捷鍵來達到同樣的效果,對於原本也是想用鍵盤搞定全世界的人,這也是不錯的方法。我的設定方式如下:

~/.vimrc

...
# nmap: 在 Normal 模式下可用
# silent: 執行後,不會在畫面下方留下痕跡
# leader: vim 快捷鍵中的 namespace,一般預設為'\'
nmap <silent> <leader>s : <C-u> call GOVIMHover()<CR>
...
透過以上的設定,在 Normal 模式下,就可以鍵入\ 再加上 s 開啟函數說明(結果如下圖)。

Code completion

此功能可以幫忙補齊未打完的程式碼,或者用來提示可以使用的相關函數或變數。要啟動此功能,也需要做一些額外的設定:

~/.vimrc

...
filetype plugin on
set omnifunc=syntaxcomplete#Complete
...
設定完後,就可以使用快捷鍵了。在 Insert Mode 下,將游標移至未完整的程式碼尾端,鍵入 Ctrl+x 再加上 Ctrl+o。其結果如下:
除了會有候選函式的清單,上方還會有 [Scratch] [Preview] 介紹函式的相關資訊。

Quickfix diagnostics

最後介紹的是顯示程式語法錯誤的清單。執行後,就會有一個額外的 Window 顯示哪些地方可能有程式語法錯誤。開啟方式為,鍵入 Shift+:,輸入cwindow,再按下 Enter 即可。其結果如下:

Ending

govim 的介紹在此到一個段落。使用 Vim 寫程式,會有一種額外的樂趣。如果開始寫程式倦怠,就來試試看用 Vim 寫程式吧!

留言

熱門文章