您好,登錄后才能下訂單哦!
golang快速入門(mén)[1]-go語(yǔ)言導(dǎo)論
golang快速入門(mén)[2.1]-go語(yǔ)言開(kāi)發(fā)環(huán)境配置-windows
golang快速入門(mén)[2.2]-go語(yǔ)言開(kāi)發(fā)環(huán)境配置-macOS
golang快速入門(mén)[2.3]-go語(yǔ)言開(kāi)發(fā)環(huán)境配置-linux
golang快速入門(mén)[3]-go語(yǔ)言helloworld
golang快速入門(mén)[4]-go語(yǔ)言如何編譯為機(jī)器碼
golang快速入門(mén)[5.1]-go語(yǔ)言是如何運(yùn)行的-鏈接器
golang快速入門(mén)[5.2]-go語(yǔ)言是如何運(yùn)行的-內(nèi)存概述
golang快速入門(mén)[5.3]-go語(yǔ)言是如何運(yùn)行的-內(nèi)存分配
golang快速入門(mén)[6.1]-集成開(kāi)發(fā)環(huán)境-goland詳解
在上一篇文章中介紹了go語(yǔ)言的集成開(kāi)發(fā)環(huán)境goland
的安裝、配置、激活、以及基本的快捷鍵用法。
在本篇文章中,我們將介紹神之編輯器:emacs
如何集成go的開(kāi)發(fā)環(huán)境
你想擁有如下圖所示的工作環(huán)境嗎?這就是emacs
的強(qiáng)大功能,快來(lái)一起學(xué)習(xí)吧~
Emacs(/?i?m?ks/,源自Editor MACroS,宏編輯器),是一個(gè)文本編輯器家族,具有強(qiáng)大的可擴(kuò)展性,在程序員和其他以技術(shù)工作為主的計(jì)算機(jī)用戶中廣受歡迎。
Emacs在1970年代誕生于MIT人工智能實(shí)驗(yàn)室(MIT AI Lab)
Emacs是當(dāng)前世界上最具可移植性的重要軟件之一,能夠在當(dāng)前絕大多數(shù)操作系統(tǒng)上運(yùn)行,包括各種類Unix系統(tǒng)(GNU/Linux、FreeBSD、NetBSD、OpenBSD、Solaris、AIX、OS X等)
Emacs不僅僅是一個(gè)編輯器,它是一個(gè)集成環(huán)境,或可稱它為集成開(kāi)發(fā)環(huán)境,這些功能如讓用戶置身于全功能的操作系統(tǒng)中。Emacs可以:
收發(fā)電子郵件、上新聞組(Gnus)
無(wú)縫直接編輯遠(yuǎn)程文件(Tramp)
通過(guò)Telnet登錄遠(yuǎn)程主機(jī)
操作殼層(M-x EShell,Term)
結(jié)合git, mercurial等版本控制系統(tǒng)并直接操作(Magit,VC)
上Twitter(Twittering-mode)
登陸IRC和朋友交流(M-x ERC,rcirc)
電子數(shù)據(jù)表
模擬其他編輯器,如vi(Evil-mode)、WordStar、EDT、TPU等
編輯Wiki (Wikipedia-mode)
對(duì)多種編程語(yǔ)言的編輯,如C/C++、Perl、Python、Lisp等等
調(diào)試程序,結(jié)合GDB,EDebug等。
玩游戲
計(jì)算器
心理咨詢(M-x doctor)
煮咖啡
記筆記、日記(Org-mode)
管理日程,Task,待辦事項(xiàng)(ToDo),約會(huì)等GTD(Org-mode)
寫(xiě)作與出版(Org-mode,Muse-mode)
目錄管理(Dired)
文件比較、合并(Ediff)
閱讀info和man文檔(M-x info,woman)
瀏覽網(wǎng)站(M-x eww)
為各種程序(TeX、LaTeX等)提供統(tǒng)一的操作界面
……
所以有人說(shuō),你可以住
在emacs里面。自誕生以來(lái),Emacs演化出了眾多分支,其中使用最廣泛的兩種分別是:1984年由理查·斯托曼發(fā)起并由他維護(hù)至2008年的GNU Emacs,以及1991年發(fā)起的XEmacs。XEmacs是GNU Emacs的分支,至今仍保持著相當(dāng)?shù)募嫒菪?。它們都使用了Emacs Lisp這種有著極強(qiáng)擴(kuò)展性的編程語(yǔ)言,從而實(shí)現(xiàn)了包括編程、編譯乃至網(wǎng)絡(luò)瀏覽等等功能的擴(kuò)展。本文主要基于GNU Emacs進(jìn)行講解
我相信熟悉linux基本操作的同學(xué)對(duì)于vim這一款編輯器不會(huì)陌生,針對(duì)vim與emacs誰(shuí)更好常常會(huì)引發(fā)一場(chǎng)論戰(zhàn)
其實(shí)vim與emacs兩種編輯器的設(shè)計(jì)哲學(xué)完全不同,風(fēng)格迥異。vim的特點(diǎn)是組合性(Composability),Emacs的特點(diǎn)是可擴(kuò)展性(Extensibility)。vim使用鍵序列輸入,Emacs則經(jīng)常使用組合鍵(同時(shí)按)輸入,跟彈鋼琴一樣。所以Emacs有個(gè)綽號(hào)Esc + Meta + Alt + Ctrl + Shift
下面我們將分別介紹在windows、mac、linux平臺(tái)安裝emacs
的方式
當(dāng)以下方法遇到問(wèn)題時(shí),記得查看GUN emacs官網(wǎng)的最新介紹
首先登陸GNU鏡像下載頁(yè)面blog,下載最新版本為emacs-26.3-x86_64.zip
解壓并重命名 emacs-26.3-x86_64.zip 到所需安裝位置。如"D:\emacs-26.3",后面均以此為例。
解壓之后,創(chuàng)建一個(gè)指向文件bin/runemacs.exe
的桌面快捷方式,然后雙擊該快捷方式的圖標(biāo)來(lái)啟動(dòng)Emacs
配置HOME目錄:在注冊(cè)表中添加計(jì)算機(jī)
\HKEY_LOCAL_MACHINE\SOFTWARE\GNU\Emacs項(xiàng),為Emacs項(xiàng)添加字符串值.
HOME -> D:\emacs-26.3`
添加系統(tǒng)環(huán)境變量D:\emacs-26.3
>>?wget??http://mirror-hk.koddos.net/gnu/emacs/emacs-26.3.tar.gz
使用tar 命令解壓剛剛下載的Go語(yǔ)言開(kāi)發(fā)包到/usr/local目錄
>>?tar?-C?/usr/local?-xzf?emacs-26.3.tar.gz
編譯
>>?cd?/usr/local/emacs-26.3
>>?./configure
>>?make?&&?make?install
運(yùn)行
直接在終端輸入emacs
安裝
>>?sudo?add-apt-repository?ppa:kelleyk/emacs
>>?sudo?apt?install?emacs26
刪除
>>?sudo?apt?remove?--autoremove?emacs26?emacs26-nox
運(yùn)行
直接在終端輸入emacs
可以使用HomeBrew進(jìn)行安裝
brew?cask?install?emacs
或者通過(guò)如下網(wǎng)站直接下載:
https://emacsformacosx.com/
運(yùn)行
直接在終端輸入emacs
emacs有一些基本的操作指令,是每一個(gè)emacser
必備的
在我們查看emacs的快捷鍵時(shí),要注意,大寫(xiě)字母C 與 M 代表的含義。在windows與linux中,C
表示 Ctrl , M
表示 Alt. 但是在mac下,C
代表的是Ctrl,
M表示的是meta鍵。此鍵是可以在
系統(tǒng)偏好設(shè)置`中配置的。
開(kāi)啟
emacs
emacs?-Q??開(kāi)啟不顯示信息
關(guān)閉
C-x?C-c
光標(biāo)操作
C-b?向后移動(dòng)一個(gè)字符
C-f?向前移動(dòng)一個(gè)字符
M-b?向后移動(dòng)一個(gè)單詞
M-f?向前移動(dòng)一個(gè)單詞
C-p?向前移動(dòng)一行
C-n?向后移動(dòng)一行
C-a?當(dāng)前行的開(kāi)始位置
C-e?當(dāng)前行的結(jié)束
M-a?向前移動(dòng)一句話
M-e?向后移動(dòng)一句話
M-<?移動(dòng)到開(kāi)始的位置
M->?移動(dòng)到結(jié)束的位置
注:<?>?需要和?shift?按鍵?一塊按
C-v??向后翻頁(yè)
M-v?向前翻頁(yè)
第一次?C-l(字符L不是數(shù)字1)?把光標(biāo)所處的位置移動(dòng)到中間?(center)
第二次?C-l(字符L不是數(shù)字1)?把光標(biāo)所處的位置移動(dòng)到上邊(top)
第三次?C-l(字符L不是數(shù)字1)?把光標(biāo)所處的位置移動(dòng)到下邊(bottom)
多窗口顯示
C-x??+?數(shù)組(0–9)
C-x?1?取消所有的窗口,只保留一個(gè)原始窗口
C-x?2?垂直切割當(dāng)前窗口,分成上下倆個(gè)窗口
C-x?3?水平切割當(dāng)前窗口,分成左右倆個(gè)窗口
C-M?v?下一個(gè)窗口翻頁(yè)
C-x?o?光標(biāo)移動(dòng)到下一個(gè)窗口
注:操作可疊加
刪除和剪切
C-d??刪除一個(gè)字符
M-d??剪切一個(gè)單詞
C-k??剪切光標(biāo)和該行末尾
M-k??剪切光標(biāo)和標(biāo)點(diǎn)符號(hào)
C-?spaces(空格鍵)??先標(biāo)記的地方為start??第二次標(biāo)記的地方為end
C-w??剪切start?和?end?中間的內(nèi)容
粘貼和復(fù)制
C-y??粘貼最近的內(nèi)容
M-y??在C-y之后使用,往上追溯替換粘貼的內(nèi)容
查找
C-s?向后查找
C-r?向前查找
打開(kāi)、新建、保存、關(guān)閉文件
C-x?C-f?打開(kāi)文件,文件不存在則新建
C-x?C-s?保存當(dāng)前文件
C-x?C-b?列出buffer文件列表
C-x?b?切換buffer文件?(通過(guò)在面板最下面輸入文件名字)
C-x?C-c?關(guān)閉并且保存文件
撤銷 & 反撤銷
C-x?u?撤銷
C--?撤銷
C-/?撤銷
在撤銷的時(shí)候如果撤銷多了需要進(jìn)行反撤銷
具體是用C-f等打斷當(dāng)前撤銷操作,接著進(jìn)行的撤銷動(dòng)作就是反撤銷。
C-x?z?重復(fù)之前的操作?重復(fù)多次可以只按zzzz
emacs 配置文件默認(rèn)位于Home
目錄下(~/),可以通過(guò)變量user-emacs-directory
修改
配置文件夾可以是Home
目錄下的.emacs.d
文件,通常會(huì)將所有配置放入其中
當(dāng)啟動(dòng)Emacs時(shí),通常會(huì)嘗試從初始化文件加載Lisp程序。該文件(如果存在)指定如何為您初始化Emacs。初始文件為 ~/.emacs, ~/.emacs.el, or ?~/.emacs.d/init.el
?中的一個(gè)。
對(duì)于初學(xué)者,可以去查找網(wǎng)上一些有名的配置直接使用,大牛一般都是一個(gè)大的.emacs.d
文件。如果想獲取筆者對(duì)于emacs的配置,可以在后臺(tái)留言。
添加官方與國(guó)內(nèi)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/")))
對(duì)于大量emacs 軟件包的配置、管理、更新。我推薦使用use-package來(lái)管理包的配置與加載。
;;
;;?use?use-package
;;
(unless?(package-installed-p?'use-package)
??(package-refresh-contents)
??(package-install?'use-package))
使用ivy-mode
拓展套件完成快速搜索、快速查找、智能補(bǔ)全功能
;;
;;?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
查找函數(shù)應(yīng)用,等價(jià)于(M-x lsp-find-ref
)
M-.
查找函數(shù)實(shí)現(xiàn)
(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 是守護(hù)進(jìn)程,查看是否在后臺(tái)運(yùn)行
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
查看是否有語(yǔ)法錯(cuò)誤
(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安裝,因?yàn)楸仨氁渲胹qlite3
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
在項(xiàng)目目錄中輸入如下,會(huì)生成GTAGS等文件
gogtags?-v
配置helm-gtags
開(kāi)啟helm-gtags-mode
M-x?helm-gtags-mode
這時(shí)候在項(xiàng)目中即可使用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
的安裝、配置特別是對(duì)于go語(yǔ)言集成環(huán)境的配置。
本文使用了use-package來(lái)管理emacs的軟件包,并詳細(xì)介紹了go語(yǔ)言集成環(huán)境的配置細(xì)節(jié)和使用方法。
遺憾的是,本文不會(huì)帶領(lǐng)大家從一個(gè)初學(xué)者完全入門(mén)emacs,用好emacs是值得一生努力的話題。學(xué)會(huì)emacs需要耐心,練習(xí),更需要交流與指導(dǎo)
如果你有更好的配置建議,或者你在使用emacs-go的過(guò)程中有任何疑問(wèn),歡迎在后臺(tái)留言,see you~
項(xiàng)目鏈接
作者知乎
blog
DotEmacsDotD
emacs-helm-gtags
用Emacs來(lái)寫(xiě)Go設(shè)定篇
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。