如何开始学习Emacs Lisp?


39

背景:

我主要是vi用户,并且正在转换为Emacs。

超越了基础知识,现在将其用于用C和一些计划编写R转换的Python编写代码。

二十多年前,当我在读研究生时,我写了(Common)LISP好几年了,但现在我已经严重失误了(可以打个招呼世界,仅此而已)。

题:

您对我这个位置的人有什么建议,以使其能够学习Emacs LISP环境并开始入侵Emacs。

是否应该阅读书籍,博客,资源和练习?

Answers:


11

以我的经验,包含在Emacs Lisp上的教程并不太有用(多年来我尝试了两次,但都失败了)。相反,我最终使用了随附的Emacs Lisp参考。

最终起作用的是:

意识到Emacs Lisp有两个方面:基本语言本身以及与Emacs的交互。在您的脑海中将这两个分开。首先关注前者(过去学习Lisp时应该不要太难)。使用Excercism之类的网站进行练习。

一旦掌握了基础知识(循环,函数,变量,条件等)后,请继续进行涉及Emacs本身的方面(更改文本,切换缓冲区等)。这是巨大的,您可能会迷失在众多的细节中。您应该非常了解一些事情,因为您会经常使用它们。他们是:

  • 互动
  • 保存游览
  • 保存限制
  • 钩子
  • 咨询职能
  • 有电流缓冲器

一旦理解了这些,您就不用花所有时间阅读ELisp参考书,而是想想要编写的Emacs遇到的简单问题,然后尝试用Elisp解决它们。您可能需要在某些步骤上获得帮助,这就是Google可以为您提供帮助的地方。

我为练习Elisp而解决的问题示例:

  • 当您使用组织捕获,你写在捕获缓冲区的最后一行文字,它并没有把一个换行符结尾,所以如果我有任何的头条新闻捕获位置,即标题将不再是一个标题。解决方法是制作一个钩子,检查是否有换行符,如果没有,请在捕获的末尾添加一个。

  • 当我一步捕获并重新归档文件时,它不会保存条目重新归档到的文件。但是,如果我不加保留地抓住了它,那就可以了。我解决了这个不一致问题。

  • 在会议中写分钟(在组织文件中)时,如果出现某人的待办事项,我想做个捕捉工作,以查找名为待办事项的标题(在我所在的最高标题下)并将待办事项放入那里。每个会议都有自己的TODO标题,并且应该转到文件中当前会议的标题。这涉及编写一个函数,该函数将树上升到顶层,并寻找一个称为TODO的子代。

  • 杀死某个模式的所有缓冲区(可能已经有一个内部函数执行此操作,但我不知道)。

最后,确保您知道以下按键绑定:

  • Cx Ce(评估表达式)
  • Ch v(查找变量的含义和值)
  • Ch f(查找内置函数的描述)。

33

真是个好问题!这是我走的路:

步骤0:阅读Emacs教程

首先阅读Emacs教程。听起来您已经做到了。很好呀!但是,对于以后再来的人来说,这是开始您的Emacs旅程的地方。那里有很多误导性的博客文章。他们使事情复杂化。Emacs使它变得容易:

  1. 启动Emacs
  2. <RET>

您也可以通过Ctrl + h tC-h t以Emacs表示法访问它。

本教程介绍了Emacs的基本概念,阐明了历史术语,并让您在30分钟之内完成操作。它还为下一步奠定了基础。

打开Emacs。 按Enter键。 就这么简单!

步骤1:阅读“ Emacs Lisp编程简介”

下一步是阅读Emacs Lisp中的编程入门。我对这本书的推荐不够多;它写得很好!大多数Emacs安装随附1。只需按下C-h i并从菜单中选择它。您也可以直接通过转到它C-h i m Emacs Lisp Intro

前言指出,

本文是作为非程序员的基本介绍而编写的。

应该说“对于不是Lisp程序员的人”。Lisp与其他语言略有不同,因此如果您不熟悉Lisp,则值得阅读。作者风格平易近人,并列举了许多例子。我花了大约一个星期的时间来完成工作。

步骤1.5:John Wiegley的Emacs Lisp开发技巧

截至2015年末,John是Emacs项目维护者。Sacha Chua 在这里对他进行了一次精彩的采访,其中John讲解了Emacs Lisp的基础知识,开发环境,并提供了很多很好的建议。

步骤2:阅读OPC(其他人的代码)

2a。阅读源代码

因为Emacs是“可扩展的,可自定义的,自记录的,实时的显示编辑器”,所以包含了所有源代码。学习对C-h f功能和C-h v变量使用帮助功能。总有一个到源代码的链接:

单击源代码链接以查看源代码!

2b。阅读所有init.el

许多人init.el使用Git或Mercurial 跟踪文件。寻找他们。一种技巧是单击StackOverflow上的人员资料,尤其是emacs.stackexchange.com

杜德(Dude)是超级用户!

他们通常具有指向GitHub或个人网站的链接:

财源!

回购称为dotemacsdotfiles相当普遍。随着时间的流逝,您将了解好的代码是什么样的,坏的代码是什么样的。您还将学习XahSasha ChuabinchenMagnar Sveenabo - abo等等的大牌。有很多人可以学习!

步骤3:入侵Emacs

挑战自己编写所需的功能。切勿盲目复制代码;总是花时间去理解它。如果您不理解,请不要使用它!当您花时间理解一段代码时,除了学习一些新知识外,您通常会考虑针对特定用例进行改进的方法。这是一个黑客的机会!毕竟,这就是您的init.el目的!犯错误,弄坏东西,学习调试。您会发现,因为Emacs是用Elisp编写的,所以开发是一种乐趣。

步骤4:在emacs.stackexchange.com上提问

我发现StackExchange上的Emacs社区喜欢一个很好的Elisp问题。因此,请放心地黑客,其他人会欣赏您的学习努力。

步骤5:在emacs.stackexchange.com上回答问题

没有什么比尝试解释某些东西更能阐明您的理解了。滚动浏览主页,您还将找到从未遇到过的问题的答案。

结论

随着时间的流逝,您将发现自己能够更快地生成解决方案并回答其他人的问题。像所有编程一样,它可能令人沮丧。但是,请记住今天要根据昨天的情况来判断自己。从字面上看,有人在Emacs上入侵已有30年了!不过,在大多数时候,您会发现Emacs是一种与您合作的乐趣,并且它给您带来的自由令人鼓舞。

祝您黑客愉快!:)

PS:检查包装邪恶


1 有些安装程序没有随附。例如,Debian用户必须单独安装它。它有点傻,但是存储在非免费仓库中/etc/apt/sources.list通过non-free在每个条目的末尾添加一个非免费的回购:

deb http://http.us.debian.org/debian stable main contrib non-free

1
感觉就像我刚刚访问了quora
user3496846

10

我推荐“ Emacs Lisp简介”。

“ Emacs Lisp简介”可能已经在您的Emacs中以信息格式提供。在Emacs中尝试C-h i m Emacs Lisp Intro RET或评估(info "(eintr) Top")

如果失败,请在网上搜索“ Emacs Lisp Intro”。


7
  1. Emacs Wiki页面“ 学习Emacs Lisp”开始

    并不是说该页面本身会教您Emacs Lisp。相反,它将指向学习资源 -正是您在此处寻找的问题。多年来,许多用户都对其进行了贡献并对其进行了编辑。一个用户的博客既有优点也有缺点。由于输入的多样性,建议的质量当然是多种多样的。

  2. 除此之外-这里其他人所说的一切,特别是从Emacs的内置文档开始:

    • Elisp手册-主要是参考,但也有一些很好的用法指导和概念性信息。它内置在Emacs中:C-h i然后选择Elisp手册。

    • Emacs Lisp简介-Lisp和Emacs Lisp的分步介绍。也内置于Emacs中,可从中获得C-h i

  3. 既然你已经使用Common Lisp的将是超级容易上手的Emacs Lisp。认为自己很幸运。

    如果您在Lisp机器上使用Common Lisp(或Zeta Lisp或其他工具),则体验将非常相似。您可以将Emacs视为一个出色的Lisp环境(除其他外)。学习时,您可以立即从零增加到60。

  4. 玩得开心!


2

作为Lisp的进修,我强烈推荐Peter Norvigs 人工智能编程范式的前三章。这些使您对Lisp有了一个很大而又快速的介绍(重新),它将使您迅速回到正轨。

对于完全菜鸟,可以使用“ 通用LISP:符号计算的温和介绍”,它教您相同的概念,但步伐要低得多。

这两本书都是在线免费提供的。

完成以上任一操作后,您可以在nullprogram.com上阅读所有带有 Elisp标签的帖子,并阅读masteringemacs.org上的阅读指南。要了解常见的陷阱,请阅读此处的主要问题将有所帮助。对于特定问题,请搜索此站点,rosettacode或您喜欢的搜索引擎。

熟悉基础知识后,“信息”手册通常会回答黑客入侵Emacs时出现的大多数剩余问题。


1

由于您具有Common Lisp的背景并且您“精通基础知识”,因此“ Emacs Lisp编程简介”没有任何意义。

您可以立即进行的操作(我没有CL的背景,因此对我有用):

1)找到您使用的模式并尝试添加功能,您将在《 Emacs Lisp参考》中找到帮助

2)使用您自己的简单功能编写您自己的自定义文件,这里再次使用Emacs Lisp参考

help-gnu-emacs列表非常有用。


1

您对我这个位置的人有什么建议,以使其能够学习Emacs LISP环境并开始入侵Emacs。

我真的不认为您需要阅读有关emacs lisp的特定内容。如果您想在Emacs中做某事,这不是秘密,您只需找到正确的命令,或者有人已经编写了代码,现在它位于Wiki页面或github上的某个位置,或者被制成了插件。只需复制粘贴该代码并阅读它,当您对.emacs感到满意时,您就会学到相当一部分Emacs lisp。

如果您想了解有关如何自定义Emacs的一些想法,那么其他人的自定义配置可能是明智的选择。您可以在此处找到此类配置的选定列表。但是,实际上,只有在您希望回答一些问题(例如,如何构造代码/包?)或为您的某些特定目标而复制的代码时,才有必要拥有自己的视野,并访问他人的.emacs。

浏览MELPA让我安装并尝试了十几个软件包。

如果您要开发一个插件,我发现阅读您喜欢的某个特定插件的代码可以使您快速入门。

自从您使用vi以来,请查看evil-mode,它对我很有用。我还建议使用helm-apropos(或只是apropos不想使用helm)命令掌舵,以使您的旅程更轻松。

因此,我的建议是立即到达定制点,您将在旅途中学习所需的一切。尤其是您之前,很久以前都入侵过Lisp,并且据我所知,因为学习elisp是达到目的的一种手段,即自定义emacs。


1

exercism.io上的Elisp曲目也是提高技能的一种有趣方式。练习比Emacs更侧重于elisp,但将涵盖各种基础知识,例如正则表达式,数据结构,数学等。


您可以改进该参考(例如提供链接)吗?您能总结一下那里找到的东西吗(似乎是某种运动)?
德鲁

exercism.io在此站点上,您可以选择一种语言并解决各种语言的问题-并查看其他人的解决方案。我发现浏览刚刚解决问题的其他人的解决方案是学习更新功能的好方法。
甲虫B。

0

在我看来,Loren Ipsum的答案相当不错。

https://emacs.stackexchange.com/a/47320/21433

我只是想补充一下,我假设您了解Lisp的基础知识。这将对您有所帮助,但这不是必需的(我会继续介绍。)

一种学习方法是简单地修改或修改现有的模式/扩展。我是在93年通过入侵Ada语言模式文件学到的。这是我回到大学时最有趣的经历之一。

因此,您可以使用自己选择的语言来做到这一点,例如Java模式,Lisp模式甚至是Elisp模式文件。

更改它,添加宏,等等。这就是我的方法。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.