学习emacs的资料求推荐

不是那种搞配置的,而是emacs的内核机制,原理啥的, 我感觉学习自己写elisp扩展,需要先搞清楚emacs运行的原理。

有没有相关的好文,好视频,好书,好教程

1 个赞

试试这个老哥的,现在出到15期了。

下面这个是李杀的,他做了很多小功能,你可以参考。

http://xahlee.info/emacs/

猫大涉猎的比较广泛,但是给了非常不错的开篇。

https://manateelazycat.github.io/2022/11/18/write-emacs-plugin/

3 个赞

mastering emacs 是个不错的书,虽说机制上没啥深度但是很全,基本覆盖了基础用户的要求。非常推荐读一读它的 Getting Help 一节,学会怎么用 Emacs 内置的基本文档和帮助功能。

快的话一晚上能翻完

(就是有点小贵)

2 个赞
(info "(eintr)")

全英文的一本书, 但是不要畏难, 因为实际阅读体验还是比较轻松愉快的. 我当初大概是两个月读完了 (因为我是学生且当时课程不算多, 如果你已经工作了的话可能时间跨度要更长了).

2 个赞

這個 GitHub - alphapapa/emacs-package-dev-handbook: An Emacs package development handbook. Built with Emacs, by Emacs package developers, for Emacs package developers. ;基本上都算準確!:v:

我自己是读以下两本书入的门:

An Introduction to Programming in Emacs Lisp

Emacs 自带的 elisp 入门教程: (info "(eintr)")

有实例, 有习题, 难度不高, 就是英文写得比较"文"一点

习题答案参考: GitHub - RenWenshan/emacs-lisp-intro-solutions: Solutions to the exercises in the `An Introduction to Programming in Emacs Lisp'

Writing GNU Emacs Extensions

写 Emacs 插件的教程, 涉及 hook、advice、minor mode、major mode 等等, 有完整的实例, 当初读完就会写插件了, 其他人写的插件也知道大概从哪里看起

就是有些内容已经过时了 (我2013年读的时候就已经有些过时了)

不是那种搞配置的,而是emacs的内核机制,原理啥的, 我感觉学习自己写elisp扩展,需要先搞清楚emacs运行的原理

你这句话就有矛盾,不是搞配置,要写elisp扩展 所以要搞清楚emacs的运行原理?

emacs本身就是巨大的runtime和那些个程序语言的虚拟机没太大区别(性能更差而已)配置和elisp扩展也不是两种东西,emacs本身的配置就是elisp,你在搞配置的时候其实就已经在写类似插件的东西了,只不过是没有包装而已。

还有想学习写elisp插件要从自身需求出发。最简单的方式就是,把你的配置整合一下发现有一堆类似功能的函数,把它们汇集起来就是一个扩展了,并不需要你所说的搞清楚内核机制这种东西。

我原来也有类似想法,后来发现:如果每个问题都追根究底的话,你转了一大圈回来可能还是写不了elisp扩展, 如果只是不求甚解,那写个elisp扩展应该是不会要很多的时间

Emacs 内部非常复杂,市面上的资料既不完整、也不系统、往往还过时了,只能自己读源代码。

想保证包的质量,比较省力的办法是发出来请高手做code review。

(再做个补充,hhh)

我在开始的时候也“想要从原理上理解” Emacs,但现在我更喜欢另一种方法,从需求找自己要学什么东西。如果能找到解决方案那直接用就行,找不到再尝试自己解决,这样也许比较能利用别人的成果。如果一个东西用不到,那就说明这个东西暂时是没用的。

相比自顶向下的学习,这种从需求出发的学法也许更好一点,在编写的时候能感到代码是“长”出来的。实现了再写个博客就很难忘记了。看文档很容易卡在某个地方,卡住了心里很容易过不去。基于文档的学习非常蛋疼。

另外的一个好处是 Emacs 本身资料的分散性并不太适合系统的学习(或者说门槛比较高,中文资料大多数都是一坨);现在的 GPT 也比较鼓励从实例中学习的方法,不懂的直接问就行,比搜索引擎方便太多了。

总结一下就是:尽量从需求出发而不是从文档出发来学习 Emacs,如果某个插件解决了需求那停留在学习插件的使用就行了;如果插件有问题可以尝试进行修复,在 debug 过程中可以提高自己的 elisp 技能;如果需求找不到对应的包,可以尝试自己实现,并活用 GPT 和搜索引擎。

3 个赞

觉得理解不够深就读文档, 觉得文档抽象就接触两个例子, 自己写点需求. 没矛盾的东西硬是搞成理念之争

目前我能知道的就是Emacs文档和源代码。其他要么偏Elisp语言语法,要么偏插件配置之类。