doom-emacs 搭建 golang 开发环境 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
请不要在回答技术问题时复制粘贴 AI 生成的内容
zjsxwc

doom-emacs 搭建 golang 开发环境

  •  
  •   zjsxwc
    zjsxwc Jan 6, 2021 2028 views
    This topic created in 1939 days ago, the information mentioned may be changed or developed.

    安装 doom-emacs

    我是 manjaro 系统,参考 https://github.com/hlissner/doom-emacs/#install

    pacman -S git emacs ripgrep pacman -S fd git clone --depth 1 https://github.com/hlissner/doom-emacs ~/.emacs.d ~/.emacs.d/bin/doom install 

    安装 gopls 这个 golang 语言服务器

    pacman -S gopls 

    配置 doom-emacs

    修改 ~/.doom.d/init.el (参考 https://emacs-lsp.github.io/lsp-mode/page/installation/

    ;;; 添加中国源 (setq package-archives '(("gnu" . "http://mirrors.ustc.edu.cn/elpa/gnu/") ("melpa" . "http://mirrors.ustc.edu.cn/elpa/melpa/") ("melpa-stable" . "http://mirrors.ustc.edu.cn/elpa/melpa-stable/") ("org" . "http://mirrors.ustc.edu.cn/elpa/org/"))) (doom! :input ... :tools lsp ;打开支持 gopls 的 lsp 协议的三方包依赖 ... :lang (go +lsp) ;对于 go 语言使用 lsp 协议 

    更新 doom-emacs 的三方包

    ~/.emacs.d/bin/doom sync 

    对 go-mode 钩子 lsp-mode 并使用 gopls 作为 lsp-server,修改文件~/.doom.d/config.el 最后添加

    (setq lsp-gopls-staticcheck t) (setq lsp-eldoc-render-all t) (setq lsp-gopls-complete-unimported t) (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)) 

    使用方式

    doom-emacs 使用 vim 快捷键编辑单个文件,使用 emacs 快捷键编辑整个项目,还能使用 emacs 庞大的 elisp 插件库。

    默认 go-mode 会以go.mod 文件所在文件为一个项目(所以每个 go 项目必须先执行go mod init xxx,来创建一个项目,如果有.gitgo.mod 同时存在会在第一次打开的时候询问以哪个项目为准,一般输入 i 就是一 go.mod 所在目录项目为准),但 gopls 会把 go-src 当作三方依赖,所以可以从我们当前代码跳到标准库代码定义中。

    使用 <空格> + c 就可以唤出菜单进行对 golang symbol 语义上跳转,

    比如 <空格> + c + d 会跳到 symbol 定义处, <空格> + c + D 会跳到使用 symbol 处(当然这个是我当前的版本快捷键,如果版本更新还是要看菜单显示出的快捷键)。

    使用 <空格> + b 就可以唤出菜单进行进行 navigation,比如 <空格> + b + [ 就是回跳上一个页面,<空格> + b + ]就是回跳下一个页面。

    使用 <空格> + s 就是全局搜索

    使用 <空格> + p 就是项目管理

    使用 <ctrl> + x + <ctrl> + c 就是退出 emacs

    使用 <alt> + x 就是执行 emacs 三方插件提供的函数

    Supplement 1    Aug 29, 2022
    最新 rls 已经被 rust-analyzer 取代所以我们从 github 源代码安装最新 rust-analyzer

    cd ~/.doom.d
    git clone https://github.com/rust-analyzer/rust-analyzer.git
    cd rust-analyzer
    cargo xtask install --server
    Supplement 2    Aug 29, 2022
    上面的 append 弄错了,不是 golang 的,而是 rust 的,请忽略
    No Comments Yet
    About     Help     Advertise     Blog     API     FAQ     Solana     4637 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 212ms UTC 10:00 PVG 18:00 LAX 03:00 JFK 06:00
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86