您的位置 首页 golang

emacs 中go的自动补全

之前一直使用的是 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的自动补全

文章地址:https://www.zhihuclub.com/211.shtml

关于作者: 智云科技

热门文章

网站地图