在我结束了大三和保研的事情后,我希望我可以干一些自己想干的事情。配置一款“我自己”的编辑器再次被我提上日程。
vscode 和 sublime text 被我早早划去了,没有任何原因,只是不够帅气。但是对于 vim 和 emacs 的选择,却让我纠结了很久,以至于需要写一个段落来坚定自己的心思。
vim 实在是太诱人了:我曾经配置过它;neovide 漂亮的光标移动特效(果冻光标),而且它最近还支持中文了;十分帅气潇洒的多模式编辑;在比较极端的条件下可以应用;因为专注于编辑功能,所以配置的背景知识不需要太多,而且中文教程很多。但是我依然没有选择 vim,这是因为我突然想到,当我就算配置完了 vim,那么我不过收获了一个编辑速度更快的编辑器,就算比 vscode 快,那又如何?我想要一个“我自己”的本质是什么?我虽然不知道“我自己”是什么,但是我知道,现在的我一定不是“我自己”。
emacs 则相反:因为它不只是一个编辑器,更像是一种 生活方式 (起码是工作方式),所以要花很多时间去了解各个方面;它的 GUI 和中文支持并不太好,我还记得我花了很长时间去配置字体等宽和输入法;键绑定永远的痛,默认快捷键和熟悉的 CUA 模式完全不一样,而且相比于 vim 还很对手指不友好、没有逻辑、还很难按;甚至启动时间也很慢,我看网上说甚至连大文本文件的处理也不如 vim 性能好。
但是我还是想使用 emacs,我觉得 emacs 对我而言,是一种更多的 可能性 。
正是遵循上文提出的思想,我将我的配置按照工作的场景来划分为不同模块。正因为不同模块对应不同场景,也就是不同需求,所以这样组织的配置,既有逻辑性,又有独特性:
这种设置是通用的,不区分工作环境的,可以看做是对于 emacs 本身的增强,这种增强又可以分为两个部分,即功能的增强和组件的增强:
- package:包管理器配置,包括代理,源,包管理器的选择,配置目录整理等。
- basic:最为基础的配置,其核心目的是将 emacs 改造成一个舒适的记事本(裸 emacs 确实做不到这点)。
- enhance:emacs 本身功能的增强配置(不会引入新的功能)。包括 minibuffer, consult, embark 这一类组织其他功能的模块,还有一些原有功能(bookmark, register, rectangle…)的配置。
- navigate:导航配置,方便进行光标的跳转。
- window:window 导航、布局和显示配置。
- tabbar:对于 window 布局组的管理配置,又因为它 frame-local 的特点,许多 frame-local 的指示部分也会放到这里。
- modeline:modeline 配置,因为直接照抄 roife,所以从 ui 中移出。
- ui:包括字体、主题、光标、fringe 等组件配置。
- shell: eshell 配置
- term: vterm 配置,和 eshell 互斥
- util:工具类,用于存储方便配置或者自己写的工具函数
- tmp:临时配置,用于存放尚未归类的配置或者实验性配置。
这部分集中于 emacs 编辑源码的能力,可以说是 vim 之前负责的部分:
- edit:通用编辑配置,包括高亮、结构化编辑、重构等。
- completion:补全配置,存在多种补全源。
- prog:源码分析与交叉引用,包括基于搜索匹配,tags,lsp,treesit 多种分析模式。
- lang:不同源码文件,启用不同的配置。
- remote:远端编辑和 docker 配置。
会以项目的方式被组织和管理,同时在时间维度上需要引入版本控制和日程管理:
- project:基础的项目管理配置,包括项目内检索,项目侧边栏等。
- workspace:对于工作空间的配置,一般是一个项目为一个工作空间,每个工作空间里有 1 个 window 布局组。和 tab-bar 互斥。
- dired:文件管理器配置。
- vsc:版本控制配置,包括 chunk 和 magit 。
- agenda:日程管理配置。
- debug:项目的编译、运行、调试和部署等方面。
- control: 日程管理配置,包括 org-capture
包括中文适配,文档撰写,博客撰写,论文撰写等(或许还考虑知识管理):
- org:org-mode 配置。
- markdown:markdown 配置。
- tex:latex 配置。
- input:中文输入配置,包括输入法配置和中英文协调配置。
- blog:博客撰写配置。
- export:导出成多媒体内容,包括幻灯片,pdf,脑图等形式。
侧重于对于多媒体内容的浏览:
这种配置思路的缺点是忽略了不同功能模块之间的相互配合,那么趣味性会减少很多,所以应当通过学习多多在文档中记录这些知识。
- speedup:记录启动性能优化思路。
- general:记录如何将 emacs 改造成一个舒适的记事本。
- keybinding:记录如何完成键绑定。
- ghost:记录 emacs 奇思妙想。
- operate:记录 emacs 奇妙操作。