Answers:
以我的经验,包含在Emacs Lisp上的教程并不太有用(多年来我尝试了两次,但都失败了)。相反,我最终使用了随附的Emacs Lisp参考。
最终起作用的是:
意识到Emacs Lisp有两个方面:基本语言本身以及与Emacs的交互。在您的脑海中将这两个分开。首先关注前者(过去学习Lisp时应该不要太难)。使用Excercism之类的网站进行练习。
一旦掌握了基础知识(循环,函数,变量,条件等)后,请继续进行涉及Emacs本身的方面(更改文本,切换缓冲区等)。这是巨大的,您可能会迷失在众多的细节中。您应该非常了解一些事情,因为您会经常使用它们。他们是:
一旦理解了这些,您就不用花所有时间阅读ELisp参考书,而是想想要编写的Emacs遇到的简单问题,然后尝试用Elisp解决它们。您可能需要在某些步骤上获得帮助,这就是Google可以为您提供帮助的地方。
我为练习Elisp而解决的问题示例:
当您使用组织捕获,你写在捕获缓冲区的最后一行文字,它并没有把一个换行符结尾,所以如果我有任何的头条新闻后捕获位置,即标题将不再是一个标题。解决方法是制作一个钩子,检查是否有换行符,如果没有,请在捕获的末尾添加一个。
当我一步捕获并重新归档文件时,它不会保存条目重新归档到的文件。但是,如果我不加保留地抓住了它,那就可以了。我解决了这个不一致问题。
在会议中写分钟(在组织文件中)时,如果出现某人的待办事项,我想做个捕捉工作,以查找名为待办事项的标题(在我所在的最高标题下)并将待办事项放入那里。每个会议都有自己的TODO标题,并且应该转到文件中当前会议的标题。这涉及编写一个函数,该函数将树上升到顶层,并寻找一个称为TODO的子代。
杀死某个模式的所有缓冲区(可能已经有一个内部函数执行此操作,但我不知道)。
最后,确保您知道以下按键绑定:
真是个好问题!这是我走的路:
首先阅读Emacs教程。听起来您已经做到了。很好呀!但是,对于以后再来的人来说,这是开始您的Emacs旅程的地方。那里有很多误导性的博客文章。他们使事情复杂化。Emacs使它变得容易:
<RET>
您也可以通过Ctrl + h
t
或C-h t
以Emacs表示法访问它。
本教程介绍了Emacs的基本概念,阐明了历史术语,并让您在30分钟之内完成操作。它还为下一步奠定了基础。
下一步是阅读Emacs Lisp中的编程入门。我对这本书的推荐不够多;它写得很好!大多数Emacs安装随附1。只需按下C-h i
并从菜单中选择它。您也可以直接通过转到它C-h i m Emacs Lisp Intro
。
前言指出,
本文是作为非程序员的基本介绍而编写的。
应该说“对于不是Lisp程序员的人”。Lisp与其他语言略有不同,因此如果您不熟悉Lisp,则值得阅读。作者风格平易近人,并列举了许多例子。我花了大约一个星期的时间来完成工作。
截至2015年末,John是Emacs项目的维护者。Sacha Chua 在这里对他进行了一次精彩的采访,其中John讲解了Emacs Lisp的基础知识,开发环境,并提供了很多很好的建议。
因为Emacs是“可扩展的,可自定义的,自记录的,实时的显示编辑器”,所以包含了所有源代码。学习对C-h f
功能和C-h v
变量使用帮助功能。总有一个到源代码的链接:
init.el
的许多人init.el
使用Git或Mercurial 跟踪文件。寻找他们。一种技巧是单击StackOverflow上的人员资料,尤其是emacs.stackexchange.com:
他们通常具有指向GitHub或个人网站的链接:
回购称为dotemacs
或dotfiles
相当普遍。随着时间的流逝,您将了解好的代码是什么样的,坏的代码是什么样的。您还将学习Xah,Sasha Chua,binchen,Magnar Sveen,abo - abo等等的大牌。有很多人可以学习!
挑战自己编写所需的功能。切勿盲目复制代码;总是花时间去理解它。如果您不理解,请不要使用它!当您花时间理解一段代码时,除了学习一些新知识外,您通常会考虑针对特定用例进行改进的方法。这是一个黑客的机会!毕竟,这就是您的init.el
目的!犯错误,弄坏东西,学习调试。您会发现,因为Emacs是用Elisp编写的,所以开发是一种乐趣。
我发现StackExchange上的Emacs社区喜欢一个很好的Elisp问题。因此,请放心地黑客,其他人会欣赏您的学习努力。
没有什么比尝试解释某些东西更能阐明您的理解了。滚动浏览主页,您还将找到从未遇到过的问题的答案。
随着时间的流逝,您将发现自己能够更快地生成解决方案并回答其他人的问题。像所有编程一样,它可能令人沮丧。但是,请记住今天要根据昨天的情况来判断自己。从字面上看,有人在Emacs上入侵已有30年了!不过,在大多数时候,您会发现Emacs是一种与您合作的乐趣,并且它给您带来的自由令人鼓舞。
祝您黑客愉快!:)
PS:检查包装邪恶。
1 有些安装程序没有随附。例如,Debian用户必须单独安装它。它有点傻,但是存储在非免费的仓库中。/etc/apt/sources.list
通过non-free
在每个条目的末尾添加一个非免费的回购:
deb http://http.us.debian.org/debian stable main contrib non-free
从 Emacs Wiki页面“ 学习Emacs Lisp”开始。
并不是说该页面本身会教您Emacs Lisp。相反,它将指向学习资源 -正是您在此处寻找的问题。多年来,许多用户都对其进行了贡献并对其进行了编辑。一个用户的博客既有优点也有缺点。由于输入的多样性,建议的质量当然是多种多样的。
除此之外-这里其他人所说的一切,特别是从Emacs的内置文档开始:
Elisp手册-主要是参考,但也有一些很好的用法指导和概念性信息。它内置在Emacs中:C-h i
然后选择Elisp手册。
Emacs Lisp简介-Lisp和Emacs Lisp的分步介绍。也内置于Emacs中,可从中获得C-h i
。
既然你已经使用Common Lisp的将是超级容易上手的Emacs Lisp。认为自己很幸运。
如果您在Lisp机器上使用Common Lisp(或Zeta Lisp或其他工具),则体验将非常相似。您可以将Emacs视为一个出色的Lisp环境(除其他外)。学习时,您可以立即从零增加到60。
玩得开心!
作为Lisp的进修,我强烈推荐Peter Norvigs 人工智能编程范式的前三章。这些使您对Lisp有了一个很大而又快速的介绍(重新),它将使您迅速回到正轨。
对于完全菜鸟,可以使用“ 通用LISP:符号计算的温和介绍”,它教您相同的概念,但步伐要低得多。
这两本书都是在线免费提供的。
完成以上任一操作后,您可以在nullprogram.com上阅读所有带有 Elisp标签的帖子,并阅读masteringemacs.org上的阅读指南。要了解常见的陷阱,请阅读此处的主要问题将有所帮助。对于特定问题,请搜索此站点,rosettacode或您喜欢的搜索引擎。
熟悉基础知识后,“信息”手册通常会回答黑客入侵Emacs时出现的大多数剩余问题。
由于您具有Common Lisp的背景并且您“精通基础知识”,因此“ Emacs Lisp编程简介”没有任何意义。
您可以立即进行的操作(我没有CL的背景,因此对我有用):
1)找到您使用的模式并尝试添加功能,您将在《 Emacs Lisp参考》中找到帮助
2)使用您自己的简单功能编写您自己的自定义文件,这里再次使用Emacs Lisp参考
help-gnu-emacs列表非常有用。
您对我这个位置的人有什么建议,以使其能够学习Emacs LISP环境并开始入侵Emacs。
我真的不认为您需要阅读有关emacs lisp的特定内容。如果您想在Emacs中做某事,这不是秘密,您只需找到正确的命令,或者有人已经编写了代码,现在它位于Wiki页面或github上的某个位置,或者被制成了插件。只需复制粘贴该代码并阅读它,当您对.emacs感到满意时,您就会学到相当一部分Emacs lisp。
如果您想了解有关如何自定义Emacs的一些想法,那么其他人的自定义配置可能是明智的选择。您可以在此处找到此类配置的选定列表。但是,实际上,只有在您希望回答一些问题(例如,如何构造代码/包?)或为您的某些特定目标而复制的代码时,才有必要拥有自己的视野,并访问他人的.emacs。
浏览MELPA让我安装并尝试了十几个软件包。
如果您要开发一个插件,我发现阅读您喜欢的某个特定插件的代码可以使您快速入门。
自从您使用vi以来,请查看evil-mode,它对我很有用。我还建议使用helm-apropos
(或只是apropos
不想使用helm
)命令掌舵,以使您的旅程更轻松。
因此,我的建议是立即到达定制点,您将在旅途中学习所需的一切。尤其是您之前,很久以前都入侵过Lisp,并且据我所知,因为学习elisp是达到目的的一种手段,即自定义emacs。
exercism.io上的Elisp曲目也是提高技能的一种有趣方式。练习比Emacs更侧重于elisp,但将涵盖各种基础知识,例如正则表达式,数据结构,数学等。
在我看来,Loren Ipsum的答案相当不错。
https://emacs.stackexchange.com/a/47320/21433
我只是想补充一下,我假设您了解Lisp的基础知识。这将对您有所帮助,但这不是必需的(我会继续介绍。)
一种学习方法是简单地修改或修改现有的模式/扩展。我是在93年通过入侵Ada语言模式文件学到的。这是我回到大学时最有趣的经历之一。
因此,您可以使用自己选择的语言来做到这一点,例如Java模式,Lisp模式甚至是Elisp模式文件。
更改它,添加宏,等等。这就是我的方法。