91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

golang快速入門[6.2]-集成開發環境-emacs詳解

發布時間:2020-08-11 10:54:39 來源:網絡 閱讀:556 作者:jonson_jackson 欄目:編程語言

golang快速入門[6.2]-集成開發環境-emacs詳解

前文

  • golang快速入門[1]-go語言導論

  • golang快速入門[2.1]-go語言開發環境配置-windows

  • golang快速入門[2.2]-go語言開發環境配置-macOS

  • golang快速入門[2.3]-go語言開發環境配置-linux

  • golang快速入門[3]-go語言helloworld

  • golang快速入門[4]-go語言如何編譯為機器碼

  • golang快速入門[5.1]-go語言是如何運行的-鏈接器

  • golang快速入門[5.2]-go語言是如何運行的-內存概述

  • golang快速入門[5.3]-go語言是如何運行的-內存分配

  • golang快速入門[6.1]-集成開發環境-goland詳解

前言

  • 在上一篇文章中介紹了go語言的集成開發環境goland的安裝、配置、激活、以及基本的快捷鍵用法。

  • 在本篇文章中,我們將介紹神之編輯器:emacs 如何集成go的開發環境

  • 你想擁有如下圖所示的工作環境嗎?這就是emacs的強大功能,快來一起學習吧~


golang快速入門[6.2]-集成開發環境-emacs詳解golang快速入門[6.2]-集成開發環境-emacs詳解

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進行講解

emacs 與 vim 的對比

  • 我相信熟悉linux基本操作的同學對于vim這一款編輯器不會陌生,針對vim與emacs誰更好常常會引發一場論戰

  • 其實vim與emacs兩種編輯器的設計哲學完全不同,風格迥異。vim的特點是組合性(Composability),Emacs的特點是可擴展性(Extensibility)。vim使用鍵序列輸入,Emacs則經常使用組合鍵(同時按)輸入,跟彈鋼琴一樣。所以Emacs有個綽號Esc + Meta + Alt + Ctrl + Shift

emacs安裝

  • 下面我們將分別介紹在windows、mac、linux平臺安裝emacs的方式

  • 當以下方法遇到問題時,記得查看GUN emacs官網的最新介紹

windows用戶
  • 首先登陸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


linux用戶
>>?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

Ubuntu平臺(16.04以上版本)
  • 安裝

>>?sudo?add-apt-repository?ppa:kelleyk/emacs
>>?sudo?apt?install?emacs26
  • 刪除

>>?sudo?apt?remove?--autoremove?emacs26?emacs26-nox
  • 運行
    直接在終端輸入emacs

mac用戶
  • 可以使用HomeBrew進行安裝

brew?cask?install?emacs
  • 或者通過如下網站直接下載:

https://emacsformacosx.com/
  • 運行
    直接在終端輸入emacs

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 配置文件

  • emacs 配置文件默認位于Home目錄下(~/),可以通過變量user-emacs-directory修改

  • 配置文件夾可以是Home目錄下的.emacs.d文件,通常會將所有配置放入其中

  • 當啟動Emacs時,通常會嘗試從初始化文件加載Lisp程序。該文件(如果存在)指定如何為您初始化Emacs。初始文件為 ~/.emacs, ~/.emacs.el, or ?~/.emacs.d/init.el ?中的一個。

  • 對于初學者,可以去查找網上一些有名的配置直接使用,大牛一般都是一個大的.emacs.d文件。如果想獲取筆者對于emacs的配置,可以在后臺留言。

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))
??)

emacs配置go開發環境

gomode + goimport自動導入 + godef跳轉
  • 首先安裝包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+company 實現代碼自動補全
  • 安裝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))))
flycheck 語法檢查
  • 配置

  • C-c ! l ?, C-c ! v 查看是否有語法錯誤

(use-package?flycheck
??:ensure?t
??:config
??(global-flycheck-mode?t)
??)
gotest 進行各種測試
(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))
errorcheck 進行程序錯誤檢查
  • 安裝

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)))
gtags 查找項目中的變量、函數等
  • 安裝源代碼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))
projectile 在go項目中切換
  • 配置

(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語言集成環境的配置細節和使用方法。

  • 遺憾的是,本文不會帶領大家從一個初學者完全入門emacs,用好emacs是值得一生努力的話題。學會emacs需要耐心,練習,更需要交流與指導

  • 如果你有更好的配置建議,或者你在使用emacs-go的過程中有任何疑問,歡迎在后臺留言,see you~

參考資料

  • 項目鏈接

  • 作者知乎

  • blog

  • DotEmacsDotD

  • emacs-helm-gtags

  • 用Emacs來寫Go設定篇


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

镇坪县| 乌兰察布市| 乌拉特中旗| 祁东县| 汽车| 延吉市| 临湘市| 镇康县| 阜平县| 伊宁县| 巴南区| 咸宁市| 福贡县| 保亭| 昂仁县| 信丰县| 岚皋县| 东乌珠穆沁旗| 绥宁县| 合山市| 政和县| 文昌市| 八宿县| 台北县| 吉木萨尔县| 宁南县| 布拖县| 彝良县| 明星| 称多县| 陇南市| 绵阳市| 江永县| 云阳县| 信阳市| 万源市| 衡阳市| 闻喜县| 大城县| 株洲市| 南丹县|