文章摘要
文章介绍了如何为Emacs编辑器进行扩展,特别是针对没有Emacs Lisp背景的初学者。作者通过自己的使用案例,展示了从使用现成配置(如Spacemacs或Doom Emacs)到自定义配置的过渡过程,重点强调了Emacs的“可扩展性”和“可内省性”特性。文章旨在帮助读者理解如何逐步学习和定制Emacs,使其更符合个人需求。
文章总结
Emacs 扩展入门指南
本文旨在帮助初学者理解 Emacs 的“可扩展性”和“自省性”特性,即使你没有 Emacs Lisp 背景。文章通过一个实际案例,展示了如何从使用现成的 Emacs 配置(如 Spacemacs 或 Doom Emacs)过渡到自定义配置的过程。
主要内容
reStructuredText 的使用
作者在工作中使用 Sphinx 编写用户文档,文档格式为 reStructuredText(.rst)。为了在文档中进行大量交叉引用,作者需要一种方法来快速查找和选择引用标签,类似于自动补全功能。Emacs 的扩展性
Emacs 不仅允许深度定制,还鼓励用户进行个性化配置。核心编辑器功能不仅文档齐全,还提供了许多扩展提示。Emacs 提供了强大的函数(如advice-add),允许用户覆盖任何函数,赋予用户极大的灵活性。Emacs Lisp 基础
Emacs Lisp 的语法与其他编程语言类似,只是用括号包裹所有内容。文章简要介绍了 Lisp 的基本语法,如print函数的写法、let宏的使用等。自动补全功能的实现
作者通过 Emacs 的completion-at-point功能,实现了在 reStructuredText 文档中自动补全引用标签的功能。具体步骤包括:- 使用
bounds-of-thing-at-point确定补全字符串的起始和结束位置。 - 使用正则表达式搜索文档中的所有引用标签。
- 将搜索结果作为补全候选列表返回。
- 使用
正则表达式的使用
Emacs 提供了强大的正则表达式工具,如re-builder和rx宏,帮助用户交互式地开发和调试正则表达式。补全功能的优化
作者进一步优化了补全功能,使其不仅能在当前文档中查找引用标签,还能在整个项目中查找。通过缓存和钩子函数,实现了高效的补全功能。总结
通过扩展 Emacs 的核心功能,作者不仅解决了工作中的实际问题,还深入了解了 Emacs 的强大扩展能力。文章鼓励读者探索和定制自己的工具,以适应不断变化的编程环境。
关键点
- Emacs 的可扩展性:Emacs 不仅允许用户进行深度定制,还提供了丰富的文档和工具,帮助用户实现个性化配置。
- Emacs Lisp 基础:即使没有 Lisp 背景,用户也可以通过简单的语法快速上手 Emacs Lisp。
- 自动补全功能的实现:通过 Emacs 的
completion-at-point功能,用户可以轻松实现文档中的自动补全功能。 - 正则表达式的使用:Emacs 提供了强大的正则表达式工具,帮助用户高效地处理文本。
本文通过详细的步骤和代码示例,展示了如何利用 Emacs 的强大功能,解决实际工作中的问题。
评论总结
评论内容总结如下:
Emacs的学习曲线与配置难度
- 一些用户认为Emacs的学习曲线陡峭,配置复杂,且缺乏统一的最佳实践。
- 引用:"the learning curve for Emacs always threw me"(Emacs的学习曲线总是让我感到困惑)
- 引用:"there doesn't seem to be any consensus on the best practices or guidelines"(似乎没有关于最佳实践或指南的共识)
Emacs的扩展性与工具支持
- Emacs内置了许多工具,如
info、apropos和describe,帮助用户理解底层机制,便于扩展和调试。 - 引用:"Emacs also has a lot of inbuilt tools to help you understand what's going on under the hood"(Emacs有许多内置工具,帮助你理解底层机制)
- 引用:"Things like this make emacs a joy to hack on"(这些工具让Emacs的扩展变得有趣)
- Emacs内置了许多工具,如
Emacs与LLM(大语言模型)的结合
- 用户通过LLM(如Claude)与Emacs结合,实现了快速反馈循环,显著提升了自定义和学习的效率。
- 引用:"Claude (or any good LLM) + Emacs is a killer app"(Claude或任何优秀的LLM与Emacs结合是杀手级应用)
- 引用:"In two weeks, I've learned more Emacs than I did the 10 years prior"(在两周内,我学到的Emacs知识比过去十年还多)
Emacs的编程模型与自定义
- Emacs的编程模型基于函数调用,用户可以通过键映射和模式自定义行为,这种灵活性是其强大之处。
- 引用:"everything is a function call"(一切都是函数调用)
- 引用:"the mental model I had for the longest time made 'typing' and 'command input' two separate domains"(我长期以来将“打字”和“命令输入”视为两个独立的领域)
总结:Emacs因其强大的扩展性和灵活性受到用户喜爱,但其陡峭的学习曲线和复杂的配置也带来挑战。通过与LLM结合,用户可以更高效地进行自定义和学习,而内置工具则为理解底层机制提供了支持。