深入浅出golangGolang 入门资料+笔记Go

golang快速入门[6.2]-集成开发环境-emacs详解

2020-02-29  本文已影响0人  唯识相链2

前文

前言

image image

emacs是什么

emacs 与 vim 的对比

emacs安装

windows用户

linux用户

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

Ubuntu平台(16.04以上版本)

>> sudo add-apt-repository ppa:kelleyk/emacs
>> sudo apt install emacs26

>> sudo apt remove --autoremove emacs26 emacs26-nox

mac用户

brew cask install emacs

https://emacsformacosx.com/

emacs快捷键

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 基本配置

(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
;;
(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跳转

go get -u github.com/rogpeppe/godef
go get -u golang.org/x/tools/cmd/goimports

(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 实现代码自动补全

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 语法检查

(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 查找项目中的变量、函数等

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

go get github.com/juntaki/gogtags

gogtags -v

M-x helm-gtags-mode

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

总结

参考资料

欢迎关注下方微信公众号,查看更多原创文章

image
上一篇 下一篇

猜你喜欢

热点阅读