搭建emacs的go編程語言環境

關於emacs就不說明了,直接切入主題。關於個人emacs配置,能夠直接參考GitHub上的lienhua34/myemacs-confhtml

go-mode

安裝

關於go-mode的安裝,能夠直接參考GitHub。從github上下載go-mode.el或go-mode-autoloads.el文件到你本地的某個目錄下,而後在~/.emacs文件中輸入下面內容:node

(add-to-list 'load-path "/path/to/your/dir")
(require 'go-mode-autoloads)

若是想要用好go-mode的特新,得先確保你本機環境安裝了godef工具。若是沒有,則運行下面命令(固然你首先也要確保你本機有go環境,而且設置了GOPATH環境變量):git

go get github.com/rogpeppe/godef

下面對go-mode提供的特性進行一下說明。github

go-mode特性簡單說明

1 函數簽名處理

go-mode提供了對函數簽名的處理方法,其支持匿名函數,不過也能夠很方便的跳過你命函數。go-mode提供了以下的函數簽名處理(括號裏是默認快捷鍵):golang

  • 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的前綴,則能夠跳過匿名函數。dom

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對代碼內容進行格式化對齊。post

3 查看文檔說明

go-mode結合godoc工具提供了查看包或者某個標識符的docstring說明,ui

  • 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

 

*******************

***歡迎轉載,不過請註明出處哦***

*******************

相關文章
相關標籤/搜索