搭建emacs的go編程語言環境


關於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

 

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

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

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM