goland
的安装、配置、激活、以及基本的快捷键用法。emacs
如何集成go的开发环境emacs
的强大功能,快来一起学习吧~
住
在emacs里面。自诞生以来,Emacs演化出了众多分支,其中使用最广泛的两种分别是:1984年由理查·斯托曼发起并由他维护至2008年的GNU Emacs,以及1991年发起的XEmacs。XEmacs是GNU Emacs的分支,至今仍保持着相当的兼容性。它们都使用了Emacs Lisp这种有着极强扩展性的编程语言,从而实现了包括编程、编译乃至网络浏览等等功能的扩展。本文主要基于GNU Emacs进行讲解Esc + Meta + Alt + Ctrl + Shift
emacs
的方式emacs-26.3-x86_64.zip
bin/runemacs.exe
的桌面快捷方式,然后双击该快捷方式的图标来启动Emacs计算机
\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 -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
brew cask install emacs
https://emacsformacosx.com/
emacs
emacser
必备的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
Home
目录下(~/),可以通过变量user-emacs-directory
修改Home
目录下的.emacs.d
文件,通常会将所有配置放入其中~/.emacs, ~/.emacs.el, or ~/.emacs.d/init.el
中的一个。.emacs.d
文件。如果想获取笔者对于emacs的配置,可以在后台留言。(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/")))
;;
;; 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))
)
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)))
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安装,因为必须要配置sqlite3wget 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
gogtags -v
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语言集成环境的配置。