Doom Emacs Golang 环境配置

Doom Emacs是一个Emacs的一个配置集合,可看做CentOS和Linux的关系。它将Emcas和Vim相结合,包含了各自的种种优点,并减少了用户折腾的时间,而且启动很快,提供超过60门编程语言的可选项,可谓十分强大。

笔者平时会使用Golang开发,所以第一时间开启了Golang的支持,由于Doom Emacs的资料比较少,在配置的过程中走了很多弯路,经过一番折腾之后终于有一个可用的版本,可能还有问题,暂时没有发现,现记录一下,供大家参考。

Doom安装完毕之后,执行下面的步骤:

第一步

修改 ~/doom.d/init.el, 可用(SPC f P)找到该文件

在 (doom! 下面找到:

:lang (go +lsp)

:tools (lsp)

:editor (sinppets, evil +everywhere, format +onsave)

:completion (company)

()中的项目都打开

第二步

找到~/doom.d/config.el,添加如下内容:

;;golang
(setq lsp-gopls-staticcheck t)
(setq lsp-eldoc-render-all t)
(setq lsp-gopls-complete-unimported t)
(setq lsp-gopls-codelens nil)
(use-package lsp-mode
  :ensure t
  :commands (lsp lsp-deferred)
  :hook (go-mode . lsp-deferred))

;; Set up before-save hooks to format buffer and add/delete imports.
;; Make sure you don't have other gofmt/goimports hooks enabled.
(defun lsp-go-install-save-hooks ()
  (add-hook 'before-save-hook #'lsp-format-buffer t t)
  (add-hook 'before-save-hook #'lsp-organize-imports t t))
(add-hook 'go-mode-hook #'lsp-go-install-save-hooks)

;; Optional - provides fancier overlays.
(use-package lsp-ui
  :ensure t
  :commands lsp-ui-mode)

;; Company mode is a standard completion package that works well with lsp-mode.
(use-package company
  :ensure t
  :config
  ;; Optionally enable completion-as-you-type behavior.
  (setq company-idle-delay 0)
  (setq company-minimum-prefix-length 1))

;; Optional - provides snippet support.
(use-package yasnippet
  :ensure t
  :commands yas-minor-mode
  :hook (go-mode . yas-minor-mode))

第三步

安装依赖包:

go install github.com/motemen/gore/cmd/gore@latest
go install github.com/stamblerre/gocode@latest
go install golang.org/x/tools/cmd/godoc@latest
go install golang.org/x/tools/cmd/goimports@latest
go install golang.org/x/tools/cmd/gorename@latest
go install golang.org/x/tools/cmd/guru@latest
go install github.com/cweill/gotests/...@latest
go install github.com/fatih/gomodifytags@latest

# gopls for (+lsp)
go install golang.org/x/tools/gopls@latest

# golangci
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest

这是针对Go >= v1.16的,低于这个版本的用go get, 我想现在大家用的都是新版本了。

第四步

执行~/.emacs.d/bin/doom sync 或者 (SPC h r r) 使配置生效

第五步

重启一下Emacs即可