emacs个人配置分享

我的 Emacs 个人配置分享

配置仓库地址:

感兴趣可以常关注 我有空会更新

这套配置已经实现了一个比较完整且舒适的工作环境,拷贝了站内很多人的配置 包含:开始屏幕、LSP 补全、DAP 调试、文件树、图标、LLM 集成,以及个人自定义主题下面来简单分享一下各个部分的实现

开始屏幕

开始屏幕主页使用高雅的 Linux 图片 支持折叠 要改todo列表就去改~/.emacs.d/todo.md文件就行了 gnus是我写死在代码里面了 具体文件在lisp/init-home.el

自定义主题

我个人写了一个自定义主题,个人感觉效果还是不错的

LSP 与代码检查

  • LSP:使用 Emacs 内置的 eglot 实现
  • 代码检查:同样使用内置的 flymake

补全与图标

  • 补全:使用第三方包 corfu
  • 图标:使用 nerd-icons

这方面也可以用内置方案替代,算是可选项

DAP 调试

使用第三方包 dape,它提供了好看的 UI 不过对我来说,少了一个方便的悬浮窗功能

另外,我对于dape 中文乱码的问题没有解决,有知道解决方案的朋友欢迎分享一下

文件树

文件树使用内置的 diredspeedbar,我对它们做了以下增强:

  • diredspeedbar 写了一个 SVG 图标的扩展
  • dired 额外实现了基于 vc 内置包的文件夹忽略着色
  • speedbar 实现了内嵌 Emacs 窗口
  • 顺带实现了 ibuffer 的图标显示

版本控制与 Magit

说到 VC,就不得不提 Magit了 在 Windows 上 Magit 特别卡,一个操作基本要好几秒我个人项目中文件数量一多就会卡几分钟,根本原因是大量的 git diff 调用对比了大量文件

为了解决这个问题,我自己写了另外的实现来提速,让 Magit 少干点活 打开 Magit 的时候就不会自动对比文件了,体验顺畅很多

LLM 集成

使用第三方包 gptel因为平时用 Claude CLI 比较多,是有考虑移除它的

Markdown 预览

  • 使用第三方包 shr-tag-pre-highlightshrface,增强了 shr 的渲染能力
  • 自己写了一个请求 GitHub 渲染 Markdown 的扩展包,实现实时更新和预览,感觉效果不错
  • 快捷键是C-c C-p右边就会弹出一个预览窗口了 保存的时候自动刷新

右键菜单

自己写了一个右键菜单,我平时预览别人的仓库比较多 所以默认把lsp给关闭了 不然打开文件太卡太久了 想打开的时候就会右键打开 挺方便的

其它内置包配置

hideshow

hideshow 实现了折叠显示的行为优化 原本会把段落折叠成 {...},如果你要折叠if else这种甚至会把if else折叠成一行 现在改成了更友好的显示方式

cc-mode

我 clone 了 tsoding 的 simpc-mode,然后自己改进了一些来替代原来的模式

C++ 的 tree-sitter 给我的体验很糟糕,主要在模块方面我也去看过仓库地址,发现维护者的精力也有限,所以就暂时先用基于正则的方案来写,体验还可以

smtpmail & gnus

  • smtpmail 发邮件
  • gnus 管理邮件,基本上就是看个 QQ 邮箱

具体配置可以看配置文件

其它第三方包简略配置

no-littering

这个包管理 .emacs.d 非常好用,保持了 .emacs.d 的整洁 有些第三方包没有自动配置到,需要自己动手去添加建议选用

rg

它的搜索结果比较好看我平时习惯用 grep -rn可选可不选

savefold

保存 hsoutline 等折叠状态对我个人来说是必选

multiple-cursors

非常好用,必选

apheleia

代码格式化配置建议选用 如果主要只写一门语言,也可以不选,自己配置一下就好

eldoc-box

显示 eldoc 文档的,非常好用 不过在补全的时候 eldoc-box-hover-at-point-mode 也会触发,导致界面一下子有 corfu 的窗口和 eldoc-box 的,界面有点混乱,目前没有解决

字体配置

具体的字体配置其实都大差不差 重要的是字体的连体 这里我是这么设置的

(dolist (chars '("::" "..." "->" "=>" "<=" ">=" "!==" "!=" "===" "=="))
  (set-char-table-range
    composition-function-table
    (aref chars 0)
    (nconc (char-table-range composition-function-table (aref chars 0))
      (list (vector (regexp-quote chars) 0 'font-shape-gstring)))))

就先分享到这里,感谢阅读!

19 个赞

这是我安装的所有三方包


正在操作高雅编辑器

4 个赞

建议去elpa目录看一下,我pc端配置的功能感觉没你多,三方包的数量都60多个了,现在配置移动端吸取经验才勉强做到第三方包不超10个

太牛皮了,支持下

1 个赞

算上依赖 有20个左右 我这个配置里面 三方包都是活干的比较多的 功能看着多 也没有 主流插件我就安装了corfu和magit 多光标 其它都是增强体验的 我自己搞了个扩展目录 自己写一些插件用 比如像我自己写的这个给dired什么的加上svg图标 然后我安装插件的时候会去看一眼仓库 如果行数在100行左右的我就内联到对应的use-package里面 自己维护了 像我这个开始屏幕就是自己写的 没有用三方包

我个人写的比较成功的还是speedbar了 把它内嵌到窗口里面添加svg图标支持 替代了treemacs 还有hideshow的折叠显示 原来的折叠

if (1) {
} else {
}

会折叠成一行 特别难受 这个我也优化了

安装的时候报错了,应该是 init.el 里面的加载顺序的问题

牛哇,我的配置现在得 150+ 包

1 个赞

我瞄了一下自己的,剛好 59 個包。感覺 10 個包簡直不可思議。

对的 我在配置的时候init.el里面init-font.el放最前面了 我本地没有同步push过去 在init.el里面把 (when (display-graphic-p) (require 'init-font)) (require 'cl-lib) 这2行代码换一下位置就可以了

我自己内联了很多三方包 主要还是像diff-hl ivy 这些我都没有安装 就配置了最基本的配置

我一共这么多 corfu和nerd-icons可以去掉 我配置里面有一个基于内置的幽灵预览补全 也挺好用的 然后gptel也可以去掉 可以做到非常精简 不过我自己配置的时候就很痛苦了 写了很多elisp代码 一个use-package的配置往往有个100-200行 那些比较重要的内置包

楼主很多包是有配置但ensure nil,相当于用ensure nil声明不是硬依赖。

建议直接把use-package加个wrapper变成maybe-use,因为builtin包本来就是ensure nil,这也是默认值,所以显式写ensure nil只是tag作用。

此外,emacs31加了path cache后,第三方包数量对启动速度影响已经大幅下降,减少第三方包仅仅是个人品味问题。

文件树的图标挺好看的

毕竟是svg 总体会比字体的单色好看很多 但实际上我有怀疑其实可以弄个动画的 我写过一点点前端 知道svg支持动画 emacs又支持渲染的话 说不定可以让文件树的图标有动画播放

让treemacs学习下这个图标 :laughing:

没啥必要 我这个图标扩展 也是找的vscode的主流扩展图标 然后改代码改成elisp treemacs想实现也很简单

很遗憾,emacs的svg支持来自librsvg2,不支持svg动画。

但是你可以用gif,虽然emacs播放gif只是一帧帧放图片,帧率很低。

PC端确实不可想像,我在移动端只写点elisp和org就不需要那么多