關於emacs就不說明了,直接切入主題。關於我的emacs配置,可以直接參考GitHub上的lienhua34/myemacs-conf。
go-mode
安裝
關於go-mode的安裝,可以直接參考GitHub。從github上下載go-mode.el或go-mode-autoloads.el文件到你本地的某個目錄下,然后在~/.emacs文件中輸入下面內容:
(add-to-list 'load-path "/path/to/your/dir") (require 'go-mode-autoloads)
如果想要用好go-mode的特新,得先確保你本機環境安裝了godef工具。如果沒有,則運行下面命令(當然你首先也要確保你本機有go環境,並且設置了GOPATH環境變量):
go get github.com/rogpeppe/godef
下面對go-mode提供的特性進行一下說明。
go-mode特性簡單說明
1 函數簽名處理
go-mode提供了對函數簽名的處理方法,其支持匿名函數,不過也可以很方便的跳過你命函數。go-mode提供了如下的函數簽名處理(括號里是默認快捷鍵):
- go-goto-arguments(C-c C-f a):跳轉到函數參數列表處;
- go-goto-docstring(C-c C-f d):跳轉到函數的docstring處,如果當前函數沒有docstring,其會自動創建一個;
- go-goto-function(C-c C-f f):跳轉到關鍵字func處;
- go-goto-function-name(C-c C-f n):跳轉到函數名處;
- go-goto-return-values(C-c C-f r):跳轉到函數返回值處;
- go-goto-method-receiver(C-c C-f m):跳轉到函數的receiver處,如果當前函數沒有,則會自動創建一堆括號。
在上述方法或者快捷鍵之前加上C-u的前綴,則可以跳過匿名函數。
2 格式化代碼
go語言自身提供了gofmt工具用於格式go語言的代碼。emacs的go-mode借助gofmt工具來實現對正在編寫的代碼進行格式化。其提供了兩種方式:
- 運行gofmt函數:M-x gofmt
- 添加一個保存前的hook,在保存文件前自動調用gofmt進行格式化。
在~/.emacs配置文件中添加下面代碼設置保存前的hook,
(add-hook 'before-save-hook 'gofmt-before-save)
這樣,在保存go語言代碼文件時回自動調用gofmt對代碼內容進行格式化對齊。
3 查看文檔說明
go-mode結合godoc工具提供了查看包或者某個標識符的docstring說明,
- M-x godoc:查看包的文檔說明,會提示你輸入包名稱
- M-x godoc-at-point:查看當前光標所在位置的標識符的docstring說明
4 import的管理
go-mode提供了三個對import進行管理的方法:
- go-goto-imports(C-c C-f i):跳轉到文件的import處;
- go-import-add(C-c C-a):添加新package的import;如果快捷鍵加上C-u前綴會提示要import的package的別稱;
- go-remove-unused-imports:刪除或者注釋掉沒有用到的import。
go-remove-unused-imports方法默認沒有綁定快捷鍵,在~/.emacs文件中下面代碼將該方法綁定到快捷鍵“C-c C-r”了。
(add-hook 'go-mode-hook (lambda() (local-set-key (kbd "C-c C-r") 'go-remove-unused-imports)))
5 代碼瀏覽
go-mode提供了標准的一些代碼瀏覽操作快捷鍵,例如:
- beginning-of-defun(C-M-a):光標快速移動到函數定義開頭;
- end-of-defun(C-M-e):光標快速移動到函數定義末尾;
- mark-defun(C-M-h):快速標記當前函數的整個內容;
- narrow-to-defun(C-x n d):只查看當前函數的內容;
另外,go-mode結合godef工具提供了如下三個功能:
- godef-describe(C-c C-d):查看當前光標所在處的標識符的說明(什么類型或者其docstring說明);
- godef-jump(C-c C-j):跳轉到光標所在處的標識符的定義處(在當前窗口);
- godef-jump-other-window(C-x 4 C-c C-j):跳轉到當前光標所在處的標識符的定義處,在新窗口打開。
go-mode提供的這種跳轉也可以跳轉到go語言的標准庫,如下所示,將光標移動到左邊緩沖區的md5Inst.Sum()的Sum標識符上,然后按快捷鍵C-x 4 C-c C-j便在右邊打開關於Sum()函數的定義,
goflymake
如果不清楚flymake的,請查看GNU flymake(很少,也很簡單,幾分鍾看懂)。
goflymake則是Doug MacEachern為go語言寫的flymake-mode,它是針對go語言代碼執行on-the-fly語法檢查的minor-mode。
安裝
參考github,先運行下面命令安裝goflymake:
go get -u github.com/dougm/goflymake
然后在~/.emacs配置文件中添加一下下面配置,
(add-to-list 'load-path "~/gocode/src/github.com/dougm/goflymake") (require 'go-flymake)
其執行檢查的三個時間點是,
- 緩沖區加載后;
- 換行時;
- 超過0.5s之前修改的內容。
使用
goflymake提供的方法有:
- flymake-mode:關閉或打開goflymake模式;
- flymake-start-syntax-check:執行語法檢查;
- flymake-stop-all-syntax-checks:停止所有語法檢查;
- flymake-goto-next-error(C-c C-e n):跳到下一個錯誤點;
- flymake-goto-prev-error(C-c C-e p):跳到前一個錯誤點;
- flymake-popup-current-error-menu(C-c C-e m):以popup的方式展示當前錯誤點的說明。
默認情況下,這些方法都沒有綁定快捷鍵,在~/.emacs配置文件添加了下面的快捷鍵綁定。
(add-hook 'flymake-mode-hook (lambda() (local-set-key (kbd "C-c C-e n") 'flymake-goto-next-error))) (add-hook 'flymake-mode-hook (lambda() (local-set-key (kbd "C-c C-e p") 'flymake-goto-prev-error))) (add-hook 'flymake-mode-hook (lambda() (local-set-key (kbd "C-c C-e m") 'flymake-popup-current-error-menu)))
效果圖如下(左圖是goflymake檢查出來的結果,紅色語句便是有問題的地方;右圖是光標移動到第一個錯誤點,按下快捷鍵C-c C-e m后顯示的錯誤menu):
推送門:
gocode+auto-complete搭建emacs的go語言自動補全功能
參考列表:
http://dominik.honnef.co/posts/2013/03/emacs-go-1/
https://github.com/dominikh/go-mode.el
https://github.com/dougm/goflymake
*******************
***歡迎轉載,不過請注明出處哦***
*******************