您好,登錄后才能下訂單哦!
在本篇文章中,我們將介紹神之編輯器:emacs
如何集成go的開發環境
你想擁有如下圖所示的工作環境嗎?這就是emacs
的強大功能,快來一起學習吧~
Emacs(/?i?m?ks/,源自Editor MACroS,宏編輯器),是一個文本編輯器家族,具有強大的可擴展性,在程序員和其他以技術工作為主的計算機用戶中廣受歡迎。
Emacs在1970年代誕生于MIT人工智能實驗室(MIT AI Lab)
Emacs是當前世界上最具可移植性的重要軟件之一,能夠在當前絕大多數操作系統上運行,包括各種類Unix系統(GNU/Linux、FreeBSD、NetBSD、OpenBSD、Solaris、AIX、OS X等)
Emacs不僅僅是一個編輯器,它是一個集成環境,或可稱它為集成開發環境,這些功能如讓用戶置身于全功能的操作系統中。Emacs可以:
收發電子郵件、上新聞組(Gnus)
無縫直接編輯遠程文件(Tramp)
通過Telnet登錄遠程主機
操作殼層(M-x EShell,Term)
結合git, mercurial等版本控制系統并直接操作(Magit,VC)
上Twitter(Twittering-mode)
登陸IRC和朋友交流(M-x ERC,rcirc)
電子數據表
模擬其他編輯器,如vi(Evil-mode)、WordStar、EDT、TPU等
編輯Wiki (Wikipedia-mode)
對多種編程語言的編輯,如C/C++、Perl、Python、Lisp等等
調試程序,結合GDB,EDebug等。
玩游戲
計算器
心理咨詢(M-x doctor)
煮咖啡
記筆記、日記(Org-mode)
管理日程,Task,待辦事項(ToDo),約會等GTD(Org-mode)
寫作與出版(Org-mode,Muse-mode)
目錄管理(Dired)
文件比較、合并(Ediff)
閱讀info和man文檔(M-x info,woman)
瀏覽網站(M-x eww)
為各種程序(TeX、LaTeX等)提供統一的操作界面
……
所以有人說,你可以住
在emacs里面。自誕生以來,Emacs演化出了眾多分支,其中使用最廣泛的兩種分別是:1984年由理查·斯托曼發起并由他維護至2008年的GNU Emacs,以及1991年發起的XEmacs。XEmacs是GNU Emacs的分支,至今仍保持著相當的兼容性。它們都使用了Emacs Lisp這種有著極強擴展性的編程語言,從而實現了包括編程、編譯乃至網絡瀏覽等等功能的擴展。本文主要基于GNU Emacs進行講解
我相信熟悉linux基本操作的同學對于vim這一款編輯器不會陌生,針對vim與emacs誰更好常常會引發一場論戰
其實vim與emacs兩種編輯器的設計哲學完全不同,風格迥異。vim的特點是組合性(Composability),Emacs的特點是可擴展性(Extensibility)。vim使用鍵序列輸入,Emacs則經常使用組合鍵(同時按)輸入,跟彈鋼琴一樣。所以Emacs有個綽號Esc + Meta + Alt + Ctrl + Shift
下面我們將分別介紹在windows、mac、linux平臺安裝emacs
的方式
當以下方法遇到問題時,記得查看GUN emacs官網的最新介紹
首先登陸GNU鏡像下載頁面blog,下載最新版本為emacs-26.3-x86_64.zip
解壓并重命名 emacs-26.3-x86_64.zip 到所需安裝位置。如"D:\emacs-26.3",后面均以此為例。
解壓之后,創建一個指向文件bin/runemacs.exe
的桌面快捷方式,然后雙擊該快捷方式的圖標來啟動Emacs
配置HOME目錄:在注冊表中添加計算機
\HKEY_LOCAL_MACHINE\SOFTWARE\GNU\Emacs項,為Emacs項添加字符串值.
HOME -> D:\emacs-26.3`
添加系統環境變量D:\emacs-26.3
>> wget http://mirror-hk.koddos.net/gnu/emacs/emacs-26.3.tar.gz
使用tar 命令解壓剛剛下載的Go語言開發包到/usr/local目錄
>> tar -C /usr/local -xzf emacs-26.3.tar.gz
編譯
>> cd /usr/local/emacs-26.3
>> ./configure
>> make && make install
運行
直接在終端輸入emacs
安裝
>> sudo add-apt-repository ppa:kelleyk/emacs
>> sudo apt install emacs26
刪除
>> sudo apt remove --autoremove emacs26 emacs26-nox
運行
直接在終端輸入emacs
可以使用HomeBrew進行安裝
brew cask install emacs
或者通過如下網站直接下載:
https://emacsformacosx.com/
運行
直接在終端輸入emacs
emacs有一些基本的操作指令,是每一個emacser
必備的
在我們查看emacs的快捷鍵時,要注意,大寫字母C 與 M 代表的含義。在windows與linux中,C
表示 Ctrl , M
表示 Alt. 但是在mac下,C
代表的是Ctrl,
M表示的是meta鍵。此鍵是可以在
系統偏好設置`中配置的。
開啟
emacs
emacs -Q 開啟不顯示信息
關閉
C-x C-c
光標操作
C-b 向后移動一個字符
C-f 向前移動一個字符
M-b 向后移動一個單詞
M-f 向前移動一個單詞
C-p 向前移動一行
C-n 向后移動一行
C-a 當前行的開始位置
C-e 當前行的結束
M-a 向前移動一句話
M-e 向后移動一句話
M-< 移動到開始的位置
M-> 移動到結束的位置
注:< > 需要和 shift 按鍵 一塊按
C-v 向后翻頁
M-v 向前翻頁
第一次 C-l(字符L不是數字1) 把光標所處的位置移動到中間 (center)
第二次 C-l(字符L不是數字1) 把光標所處的位置移動到上邊(top)
第三次 C-l(字符L不是數字1) 把光標所處的位置移動到下邊(bottom)
多窗口顯示
C-x + 數組(0–9)
C-x 1 取消所有的窗口,只保留一個原始窗口
C-x 2 垂直切割當前窗口,分成上下倆個窗口
C-x 3 水平切割當前窗口,分成左右倆個窗口
C-M v 下一個窗口翻頁
C-x o 光標移動到下一個窗口
注:操作可疊加
刪除和剪切
C-d 刪除一個字符
M-d 剪切一個單詞
C-k 剪切光標和該行末尾
M-k 剪切光標和標點符號
C- spaces(空格鍵) 先標記的地方為start 第二次標記的地方為end
C-w 剪切start 和 end 中間的內容
粘貼和復制
C-y 粘貼最近的內容
M-y 在C-y之后使用,往上追溯替換粘貼的內容
查找
C-s 向后查找
C-r 向前查找
打開、新建、保存、關閉文件
C-x C-f 打開文件,文件不存在則新建
C-x C-s 保存當前文件
C-x C-b 列出buffer文件列表
C-x b 切換buffer文件 (通過在面板最下面輸入文件名字)
C-x C-c 關閉并且保存文件
撤銷 & 反撤銷
C-x u 撤銷
C-- 撤銷
C-/ 撤銷
在撤銷的時候如果撤銷多了需要進行反撤銷
具體是用C-f等打斷當前撤銷操作,接著進行的撤銷動作就是反撤銷。
C-x z 重復之前的操作 重復多次可以只按zzzz
emacs 配置文件默認位于Home
目錄下(~/),可以通過變量user-emacs-directory
修改
配置文件夾可以是Home
目錄下的.emacs.d
文件,通常會將所有配置放入其中
當啟動Emacs時,通常會嘗試從初始化文件加載Lisp程序。該文件(如果存在)指定如何為您初始化Emacs。初始文件為 ~/.emacs, ~/.emacs.el, or ~/.emacs.d/init.el
中的一個。
對于初學者,可以去查找網上一些有名的配置直接使用,大牛一般都是一個大的.emacs.d
文件。如果想獲取筆者對于emacs的配置,可以在后臺留言。
添加官方與國內package的源
(setq package-archives '(("gnu" . "http://elpa.emacs-china.org/gnu/")
("melpa-stable" . "http://elpa.emacs-china.org/melpa-stable/")
("melpa-stable2" . "https://stable.melpa.org/packages/")
("melpa" . "http://elpa.emacs-china.org/melpa/")
("marmalada" . "http://elpa.emacs-china.org/marmalade/")))
對于大量emacs 軟件包的配置、管理、更新。我推薦使用use-package來管理包的配置與加載。
;;
;; use use-package
;;
(unless (package-installed-p 'use-package)
(package-refresh-contents)
(package-install 'use-package))
使用ivy-mode
拓展套件完成快速搜索、快速查找、智能補全功能
;;
;; ivy mode
;;
(use-package ivy
:ensure t
:diminish (ivy-mode . "")
:config
(ivy-mode 1)
(setq ivy-use-virutal-buffers t)
(setq enable-recursive-minibuffers t)
(setq ivy-height 10)
(setq ivy-initial-inputs-alist nil)
(setq ivy-count-format "%d/%d")
(setq ivy-re-builders-alist
`((t . ivy--regex-ignore-order)))
)
;;
;; counsel
;;
(use-package counsel
:ensure t
:bind (("M-x" . counsel-M-x)
("\C-x \C-f" . counsel-find-file)))
;;
;; swiper
;;
(use-package swiper
:ensure t
:bind (("\C-s" . swiper))
)
首先安裝包godef 與 goimports
go get -u github.com/rogpeppe/godef
go get -u golang.org/x/tools/cmd/goimports
配置
M-n
查找函數應用,等價于(M-x lsp-find-ref
)
M-.
查找函數實現
(use-package go-mode
;; :load-path "~/.emacs.d/vendor/go-mode"
:mode ("\\.go\\'" . go-mode)
:ensure-system-package
((goimports . "go get -u golang.org/x/tools/cmd/goimports")
(godef . "go get -u github.com/rogpeppe/godef"))
:init
(setq gofmt-command "goimports"
indent-tabs-mode t)
:config
(add-hook 'before-save-hook 'gofmt-before-save)
:bind (:map go-mode-map
("\C-c \C-c" . compile)
("\C-c \C-g" . go-goto-imports)
("\C-c \C-k" . godoc)
("M-j" . godef-jump)))
安裝gocode
go get -u github.com/stamblerre/gocode
gocode 是守護進程,查看是否在后臺運行
ps -e | grep gocode
配置
;;
;; company
;;
(use-package company
:ensure t
:config
(global-company-mode t)
(setq company-idle-delay 0)
(setq company-minimum-prefix-length 3)
(setq company-backends
'((company-files
company-yasnippet
company-keywords
company-capf
)
(company-abbrev company-dabbrev))))
(add-hook 'emacs-lisp-mode-hook (lambda ()
(add-to-list (make-local-variable 'company-backends)
'(company-elisp))))
配置
C-c ! l , C-c ! v
查看是否有語法錯誤
(use-package flycheck
:ensure t
:config
(global-flycheck-mode t)
)
(use-package gotest
:after go-mode
:bind (:map go-mode-map
("C-c C-f" . go-test-current-file)
("C-c C-t" . go-test-current-test)
("C-c C-p" . go-test-current-project)
("C-c C-b" . go-test-current-benchmark)
("C-x x" . go-run))
:config
(setq go-test-verbose t))
安裝
go get -u github.com/kisielk/errcheck
配置
(use-package go-errcheck
:after go-mode
:ensure-system-package (errcheck . "go get -u github.com/kisielk/errcheck")
:bind (:map go-mode-map
("C-c C-e" . go-errcheck)))
安裝源代碼GUN global
, 注意mac用戶不要用brew安裝,因為必須要配置sqlite3
wget http://tamacom.com/global/global-6.5.7.tar.gz
tar xvf global-6.5.7.tar.gz
cd global-6.5.7
./configure --with-sqlite3
make
sudo make install
安裝gtags
生成器
go get github.com/juntaki/gogtags
在項目目錄中輸入如下,會生成GTAGS等文件
gogtags -v
配置helm-gtags
開啟helm-gtags-mode
M-x helm-gtags-mode
這時候在項目中即可使用M-x helm-gtags find partern
等查找tags
(use-package helm-gtags
:config
(setq helm-gtags-ignore-case t
helm-gtags-auto-update t
helm-gtags-use-input-at-cursor t
helm-gtags-pulse-at-cursor t
helm-gtags-prefix-key "\C-cg"
helm-gtags-suggested-key-mapping t)
:bind (:map helm-gtags-mode-map
("C-c g a" . helm-gtags-tags-in-this-function)
("C-j" . helm-gtags-select)
("M-." . helm-gtags-dwim)
("M-," . helm-gtags-pop-stack)
("C-c <" . helm-gtags-previous-history)
("C-c >" . helm-gtags-next-history))
:hook ((dired-mode eshell-mode c-mode c++-mode asm-mode) . helm-gtags-mode))
配置
(use-package dumb-jump
:bind (("M-g o" . dumb-jump-go-other-window)
("M-g j" . dumb-jump-go)
("M-g x" . dumb-jump-go-prefer-external)
("M-g z" . dumb-jump-go-prefer-external-other-window))
:config
;; (setq dumb-jump-selector 'ivy) ;; (setq dumb-jump-selector 'helm)
:initny
(dumb-jump-mode)
:ensure
)
在本文中,我們介紹了神之編輯器emacs
的安裝、配置特別是對于go語言集成環境的配置。
本文使用了use-package來管理emacs的軟件包,并詳細介紹了go語言集成環境的配置細節和使用方法。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。