emacs 中go的自动补全

圣斗士皮皮 · · 1482 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

之前一直使用的是 gocode (https://github.com/nsf/gocode
), 后来项目不维护了让用 https://github.com/mdempsky/gocode, 然后这个项目又不维护了,让用 https://github.com/stamblerre/gocode, 然后这个项目也不维护了,都一齐推荐使用 gopls.

gopls 的介绍见 https://github.com/golang/tools/blob/master/gopls/README.md, 从地址中看出,这是一个 golang 官方tools 库中的项目。应该以后不会再换了。不过从介绍上看,还处在 alpha 阶段,尚不稳定。2020 年上半年会发布稳定版。

gopls 是官方的 Language Server 实现,功能有补全,跳转定义,查找引用,鼠标悬停提示,可以抛弃 godef, gocode 相关的工具了。

安装

go get golang.org/x/tools/gopls@latest

大概率会出现 go: cannot use path@version syntax in GOPATH mode 的错误,有就执行下面命令安装:

GO111MODULE=on go get golang.org/x/tools/gopls@latest

GO111MODULE 是什么,就去看看 https://learnku.com/go/t/39086

配置 emacs

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

M-. 和 M-, 这两个常用的定义跳转跳回默认是绑定了,不需要再额外配置。


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:圣斗士皮皮

查看原文:emacs 中go的自动补全

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

1482 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传