不知多久能学会 Elisp

码海星罗盘
• 阅读 4193

在一个春天的夜晚,好久也没怎么出门的我,偶然发现 Emacs Lisp 程序能够像脚本程序那般运行,而不仅仅是用于为文本编辑器 Emacs 编写配置文件或插件。这个发现,让我觉得无意中发现了一宗瑰奇的宝藏。

关于 Lisp 语言的源远流长及其与 Emacs 的莫逆之交,有很多书籍和文章早已给出了严肃的介绍,在此我就不必再行考证和阐述了……没人发稿费,就没必要凑字数。下面,大致总结一下为什么我会觉得能像脚本程序那般运行的 Emacs Lisp 程序蕴含着一宗宝藏:

  • Emacs Lisp 具备着通用的编程语言应该具备的元素,可用于编写在计算机上解释运行的程序。
  • Emacs Lisp 是一种 Lisp 方言,继承了 Lisp 语言的一些重要特性,例如支持泛函编程(Functional Progarmming),可基于宏实现语法扩展。与那些更好的 Lisp 方言相比,Emacs Lisp 存在一些差距 1,却也无伤大雅,因为在通晓 Emacs Lisp 的基础上,再学习其他更好的 Lisp 方言,仅需要再理解寥寥几个新的概念,诸如续延(Continuation)、卫生宏(Hygienic macro)等。
  • 使用 Emacs Lisp 语言编写的程序具备跨平台性。Emacs 可在 GNU/Linux,Windows,Mac OS 以及 FreeBSD 等系统上运行,因而使用 Emacs Lisp 语言编写的程序通常可毫无障碍地这些系统中运行。
  • Emacs Lisp 程序可调用 C 程序库里的函数 2,因而其性能瓶颈可基于 C 程序予以弥补。
  • Emacs Lisp 具备其他编程语言可能没有的一些特性,这个特性并不来自语言,而是来自 Emacs 自身。迄今为止,Emacs 依然称得上世上最好的文本编辑器,它在文本处理方面长期以来凝聚了众多智慧,而这些智慧早已积淀形成了一个庞大的 Emacs Lisp 代码库。这是否意味着,在我使用 Emacs Lisp 编写一个程序用于处理某种特定格式的文本时,有近乎取之不尽的代码可用呢?

诚然,Emacs Lisp 有一些先天不足 3。不过,对于文本处理方面的任务而言,Emacs 自身的存在足以证明这些先天不足是次要矛盾。我所说的能像脚本程序那般运行的 Emacs Lisp 程序蕴含着一宗宝藏,主要针对编写文本处理程序而言。

基于上述构想,我为了消费这宗宝藏而作出了以下这些微小的尝试:

  1. Hello world!
  2. 文本解析
  3. 变量
  4. 迭代
  5. 文本匹配
  6. 缓冲区变换
  7. 命令行程序界面
  8. 文本跨行提取
  9. 动态模块
  10. 兔子洞

我不是 Emacs 专家,也不是 Lisp 专家,只是一个希望 Emacs Lisp 能在生活中发挥一些作用的人。在上述的尝试里,我像许多人那样,将 Emacs Lisp 简称为 Elisp,以略微减轻手指关节的劳损。


  1. https://www.emacswiki.org/ema...
  2. Emacs 自版本 25 开始支持加载 C 语言写的动态库。
  3. https://www.emacswiki.org/ema...
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Jacquelyn38 Jacquelyn38
4年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Python Challenge Level 18
初学Python,挑战一下流行的PythonChallenge,很不幸,卡在了18关~~被字符字节码之间的转换搞得焦头烂额,不过终于搞定了还是很happy的~~~主要的问题就是16进制形式的字符如何转成字节码(注意:不是encoding)如:\'89','50','4e','47','0d','0a','1a','0a','00
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
Uber准备放弃自动驾驶,转手卖给前谷歌无人车CTO,估值曾被孙正义炒到72.5亿美元
!(https://oscimg.oschina.net/oscnet/0fe7cb00a0cf4872b022342d1e21d47e.png)杨净发自凹非寺量子位报道|公众号QbitAI最新消息,Uber要出售无人驾驶部门(ATG)了。据TechCrunch报道,Uber有意向出售,而也有人愿意买。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(