热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

doomemacs搭建golang开发环境

安装 doom-emacs我是 manjaro 系统,参考 https://github.com/hlissner/doom-emacs/#install1234pacman -S git emacs

安装 doom-emacs

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



1
2
3
4
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 语言服务器

1
pacman -S gopls


配置 doom-emacs

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

1
2
3
4
5
6
7
8
9
10
11
12
13
;;; 添加中国源

(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 的三方包



1
~/.emacs.d/bin/doom sync

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
(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 会以

1
go.mod

文件所在文件为一个项目(所以每个 go 项目必须先执行

1
go mod init xxx

,来创建一个项目,如果有

1
.git

1
go.mod

同时存在会在第一次打开的时候询问以哪个项目为准,一般输入 i 就是一 go.mod 所在目录项目为准),但 gopls 会把 go-src 当作三方依赖,所以可以从我们当前代码跳到标准库代码定义中。

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

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

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

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

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

使用 + x + + c 就是退出 emacs

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


   



推荐阅读
  • 本文深入探讨了 MXOTDLL.dll 在 C# 环境中的应用与优化策略。针对近期公司从某生物技术供应商采购的指纹识别设备,该设备提供的 DLL 文件是用 C 语言编写的。为了更好地集成到现有的 C# 系统中,我们对原生的 C 语言 DLL 进行了封装,并利用 C# 的互操作性功能实现了高效调用。此外,文章还详细分析了在实际应用中可能遇到的性能瓶颈,并提出了一系列优化措施,以确保系统的稳定性和高效运行。 ... [详细]
  • 在Android平台上利用FFmpeg的Swscale组件实现YUV与RGB格式互转
    本文探讨了在Android平台上利用FFmpeg的Swscale组件实现YUV与RGB格式互转的技术细节。通过详细分析Swscale的工作原理和实际应用,展示了如何在Android环境中高效地进行图像格式转换。此外,还介绍了FFmpeg的全平台编译过程,包括x264和fdk-aac的集成,并在Ubuntu系统中配置Nginx和Nginx-RTMP-Module以支持直播推流服务。这些技术的结合为音视频处理提供了强大的支持。 ... [详细]
  • 在Python 3环境中,当无法连接互联网时,可以通过下载离线模块包来实现模块的安装。具体步骤包括:首先从PyPI网站下载所需的模块包,然后将其传输到目标环境,并使用`pip install`命令进行本地安装。此方法不仅适用于单个模块,还支持依赖项的批量安装,确保开发环境的完整性和一致性。 ... [详细]
  • 如何使用 net.sf.extjwnl.data.Word 类及其代码示例详解 ... [详细]
  • jQuery Flot 数据可视化插件:高效绘制图表的专业工具
    jQuery Flot 是一款高效的数据可视化插件,专为绘制各种图表而设计。该工具支持丰富的图表类型和自定义选项,适用于多种应用场景。用户可以通过其官方网站获取示例代码和下载资源,以便快速上手和使用。 ... [详细]
  • 计算 n 叉树中各节点子树的叶节点数量分析 ... [详细]
  • BZOJ4240 Gym 102082G:贪心算法与树状数组的综合应用
    BZOJ4240 Gym 102082G 题目 "有趣的家庭菜园" 结合了贪心算法和树状数组的应用,旨在解决在有限时间和内存限制下高效处理复杂数据结构的问题。通过巧妙地运用贪心策略和树状数组,该题目能够在 10 秒的时间限制和 256MB 的内存限制内,有效处理大量输入数据,实现高性能的解决方案。提交次数为 756 次,成功解决次数为 349 次,体现了该题目的挑战性和实际应用价值。 ... [详细]
  • 从无到有,构建个人专属的操作系统解决方案
    操作系统(OS)被誉为程序员的三大浪漫之一,常被比喻为计算机的灵魂、大脑、内核和基石,其重要性不言而喻。本文将详细介绍如何从零开始构建个人专属的操作系统解决方案,涵盖从需求分析到系统设计、开发与测试的全过程,帮助读者深入理解操作系统的本质与实现方法。 ... [详细]
  • 作为140字符的开创者,Twitter看似简单却异常复杂。其简洁之处在于仅用140个字符就能实现信息的高效传播,甚至在多次全球性事件中超越传统媒体的速度。然而,为了支持2亿用户的高效使用,其背后的技术架构和系统设计则极为复杂,涉及高并发处理、数据存储和实时传输等多个技术挑战。 ... [详细]
  • 本题库精选了Java核心知识点的练习题,旨在帮助学习者巩固和检验对Java理论基础的掌握。其中,选择题部分涵盖了访问控制权限等关键概念,例如,Java语言中仅允许子类或同一包内的类访问的访问权限为protected。此外,题库还包括其他重要知识点,如异常处理、多线程、集合框架等,全面覆盖Java编程的核心内容。 ... [详细]
  • 本文介绍了一种基于最大匹配算法的简易分词程序的设计与实现。该程序通过引入哈希集合存储词典,利用前向最大匹配方法对输入文本进行高效分词处理,具有较高的准确率和较快的处理速度,适用于中文文本的快速分词需求。 ... [详细]
  • 在Hive中合理配置Map和Reduce任务的数量对于优化不同场景下的性能至关重要。本文探讨了如何控制Hive任务中的Map数量,分析了当输入数据超过128MB时是否会自动拆分,以及Map数量是否越多越好的问题。通过实际案例和实验数据,本文提供了具体的配置建议,帮助用户在不同场景下实现最佳性能。 ... [详细]
  • 如何在 Java LinkedHashMap 中高效地提取首个或末尾的键值对? ... [详细]
  • 本文深入探讨了IO复用技术的原理与实现,重点分析了其在解决C10K问题中的关键作用。IO复用技术允许单个进程同时管理多个IO对象,如文件、套接字和管道等,通过系统调用如`select`、`poll`和`epoll`,高效地处理大量并发连接。文章详细介绍了这些技术的工作机制,并结合实际案例,展示了它们在高并发场景下的应用效果。 ... [详细]
  • 优化Oracle数据库日志功能的关闭方法与实践
    在优化Oracle数据库日志功能的过程中,关闭不必要的日志记录是一项重要任务。本文探讨了Oracle 11g中日志路径的配置和管理,特别是针对常用的警报日志(alert log)。通过合理配置 `alert_$ORACLE_SID.log` 文件,可以有效减少日志文件的大小和提高系统性能。此外,文章还介绍了如何通过调整参数和使用脚本自动化日志管理,进一步提升数据库的稳定性和维护效率。 ... [详细]
author-avatar
高远PASTOR
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有