文章摘要
作者Rahul分享了他维护Emacs Solo配置两年的经验,该项目包含35个模块,完全使用原生Emacs Lisp编写,不依赖外部包,并进行了全面重构。这体现了他对Emacs配置的深度定制和优化。
文章总结
《两年Emacs Solo之旅:35个模块、零外部包与全面重构》
作者Rahul M. Juliato在个人博客分享了其独立维护的Emacs配置项目"Emacs Solo"两周年的进展。这个项目的核心原则是:完全不用外部包,所有功能要么基于Emacs原生功能,要么由作者自行实现。
项目重构亮点: 1. 架构分层:将原本单一的init.el拆分为两个层级 - 核心层:仅配置Emacs内置功能(如窗口管理、版本控制等) - 扩展层:35个独立模块实现常用功能(如主题系统、代码格式化等)
核心配置优化: - 采用Emacs 31新特性(如树状解析器、窗口布局命令) - 深度定制内置工具(VC版本控制系统可覆盖95%日常Git操作) - 强化Eshell功能(共享历史、多提示样式等)
特色模块示例: - 主题系统:基于Modus主题的多种变体 - 代码导航:类ace-window的窗口跳转功能 - 开发辅助:ESLint集成、AI编程助手 - 生活工具:天气查询、加密货币汇率
项目收获: 1. 发现Emacs原生功能的强大(如vc、icomplete等) 2. 自主开发是学习Elisp的最佳途径 3. 小型模块(多数<200行)更易维护 4. 向上游贡献代码的价值
作者强调,这个配置虽然证明无需外部包也能构建现代Emacs环境,但更重要的意义在于: - 完全掌控配置的每个细节 - 深入理解Emacs工作机制 - 提供可复用的独立模块
项目地址:https://github.com/LionyxML/emacs-solo
(注:原文中关于具体技术实现的详细代码片段、模块功能列表的完整枚举,以及致谢部分的具体人名等内容已做精简处理,保留核心信息架构和项目亮点)
评论总结
以下是评论内容的总结,平衡呈现不同观点并保留关键引用:
支持自定义代码的观点
自主可控性:自定义代码让开发者完全掌控功能,便于调试和维护。
- wilkystyle:"That means the code is sketchy sometimes, sure, but it's in my control... when it breaks, I know exactly where to look."("代码可能不够完美,但它由我掌控...出问题时我能精准定位。")
- coolcoder9520:"owning the entire execution graph of your own tools... It's not about being a purist; it's about being the master of your own stack."("完全掌控工具链...这不是纯粹主义,而是成为技术栈的主人。")
解决特定需求:第三方包无法满足个性化需求时,自定义是必要选择。
- wilkystyle举例:自定义文本选区功能可突破tree-sitter插件的限制,支持正则匹配和分层扩展。
质疑完全自研的观点
效率与实用性:完全从零开始可能浪费时间,合理复用现有代码更高效。
- Ferret7446:"Doing everything from scratch is a waste of time... roughly equivalent to trying to discover all of our scientific knowledge yourself"("从零造轮子如同独自重走科学史——毫无必要")
- gyrgtyn:"I could not make magit myself"("我无法独自写出magit这样的工具")
学习方式争议:仅靠自研无法有效提升编程能力,阅读优秀代码同样重要。
- Ferret7446:"Absolutely not. Reading a language is crucial... Only by reading stuff written by others can you learn"("绝非如此。阅读他人代码至关重要,这是学习的唯一途径")
其他观点
对Emacs生态的思考:
- lvass建议部分代码可考虑合并到上游:"a good chunk of the stuff here should be upstreamed"("这些代码值得并入官方版本")
- bananamogul质疑Lisp的不可替代性:"Is there some reason Lisp is superior...?"("Lisp真的比其他语言更适合文本编辑吗?")
开发者困境:
- hirvi74表达时间与现实的矛盾:"I would love to be liberated from... dependencies. I just do not have the time"("渴望摆脱依赖,但缺乏时间")
- throwaway27448吐槽术语问题:"Modules and packages are so abstract..."("模块和包的定义过于抽象")
(注:所有评论均无评分数据,故未体现认可度差异)