Emacs 25.3发布了,这个版本只是为了修复Enriched mode允许执行任意指令的Bug。这个Bug和这个修复版本没有什么好说的,就是一个设计上的漏洞,允许在文件中嵌入和执行Lisp语句,其实其他的模式也有类似的设计,但这个Enriched mode实在是古老和naïve,根本没有考虑安全性。既然Enriched mode又火了一把(存在了18年的漏洞,影响千百万用户……),想说说Enriched mode以及其背后的所见即所得和标记语言之争。

Enriched mode与所见即所得

正如上面说的,Enriched mode古老而幼稚,但人家出身还不错哟,实现的是一个国际化的标准RFC 1563,具体来说,是实现了一种简单化的支持所见即所得编辑的文件格式。今天的Bug也是为了实现功能而引入的,因为要在文件中更改高级的格式,如颜色,上下标等,必须要用Lisp来扩展,可以执行Lisp代码自然把危险引入了系统中。这背后的哲学就是所见即所得(WYSIWYG,What You See Is What You Get)的编辑模式。你看到的格式,如颜色、大小和布局就是你期望的,保存后打开,还是原来的样子(为了修复Bug,Enriched mode现在不支持颜色等高级的格式了)。标记语言则不同。

标记语言的特质

标记语言,如Org mode和Markdown,格式以一些符号标记,如*等保存在文件中,也就是说,你期望的效果是没法实时看到(如果你非要看,可以借助预览的手段,但这与标记语言的初衷违背)。这样设计的优点是

  • 兼容性好
  • 实现简单
  • 专注内容

主要的缺点就是不能实时预览。而所见即所得的有缺点正好和标记语言的相反,实现复杂,但更易于使用。

说到这里,需要插一句,数年前,RMS曾经期望Emacs成为一个所见即所得的编辑器,但讨论了一月左右,没有下文了。实现的困难以及目标用户数量过少是失败的主要原因,Enriched mode在当年就是向这方面发展的一个尝试。

另外一个圣战

在编辑领域,标记语言和所见即所得的战争发生在LaTeX和MS Word之间,它们俩分别代表了两种操作模式,二者孰优孰劣甚至有研究论文发表。对于用户而言,适合的就是最好的,不是么?

延伸阅读

另外,我以前写过Markdown和Org-mode的比较,算本文的一个延伸阅读。

本文被我转载到Emacs China社区,引起了大家的讨论,有不少的回复,还部分解决了我上面文章中提出的Org mode无法良好处理化学名的问题。能生产一个话题我非常高兴,接着各位大神的话再说几句我的观点

  1. 标记语言的一个功能是方便作者快速写作,提高「文字→出版」的效率。这点做不好,不能算「好」的标记语言。

  2. 再次强调,适合的才是最好的。我不喜欢Org mode,可能是因为它不适合我,所以我在上面说了一些负面的评论。我想说,如果Org或别的什么工具不适合你,换个适合的就好。

  3. 内容和样式分离可以提高写作效率,一定要善于使用,标记语言也是为此而生的。

  4. Emacs的用户不大喜欢所见即所得的方式,这点也就没有引起什么讨论。但不能就此轻视它,因为很多人对于Markdown实时渲染的需求,不就可以用所见即所得编辑来解决么?

  5. 再次感谢各位的阅读和讨论。