1

如此处所述,emacs-lisp-mode 提供了对从第一列开始的文档字符串中的 s 表达式的特殊处理。这需要使用反斜杠对它们进行转义,以避免稍后在文件中破坏字体锁定。

这可能是 elisp 的一个特性,但在其他 lisp 模式中是不幸的,这些模式为了方便而重用 emacs-lisp-mode,没有对文档字符串中的表达式进行特殊处理,如此处所述/显示

我的问题是,有没有办法让这种“后代”模式配置 emacs-lisp-mode 以忽略文档字符串中的“调用约定表达式”?

4

3 回答 3

1

最简洁的答案是不。

更长的答案是那些其他模式被简单地破坏了。他们应该在这方面适应 Emacs Lisp。没有理由不这样做,是吗?使用变通办法(例如,缩进所有文档字符串行)只是一个坏主意,这在您提供的链接(及其链接的重复帖子)中建议。

Emacs 文档字符串不是简单的字符串。它们有几个特殊属性,包括 、 和 的处理,\\[...]以及您在此处提到的属性。\\{...}\\<...>

如果某些模式不能适应Emacs 文档字符串,那么它应该使用宏来定义它需要的东西,而无需为它们创建 Emacs 文档字符串,而是通过以所需的特殊方式处理不同的字符串参数。IOW,创建与模式想要的而不是 Emacs 想要的相对应的伪文档字符串。

当然,这意味着您不能直接利用 Emacs 文档功能。您还需要定义特定于模式的 doc 命令,例如,包装现有的 doc 函数,例如describe-function使用获取模式的伪文档字符串和 DTRT 的代码,遵循模式的约定而不是 Emacs 文档字符串约定.

但我认为最简单的方法是使模式适应现有的 Emacs 行为,以便 DTRT。

于 2013-10-25T16:27:42.047 回答
0

许多 Emacs 编程模式,各种 Lisp 模式也不例外,都是基于带有正则表达式的解析器实现的。不幸的是,这使编辑者对正在编辑的文档知之甚少。例如,Eclipse 对如何编辑代码有一个非常不同的想法,它更加结构化,而 JetBrain MPS 编辑器在这个意义上更加严格和结构化(几乎就像电子表格一样)。这使得 Emacs 模式更快更容易实现,但这也意味着支持正确缩进、语法验证和突出显示的代码必须在每次编辑时重新解析更多文本。CEDET,afaik,正试图解决这个问题。

因此,从历史上看,有一些约定旨在减少每次编辑时要解析的代码量。第一列中的括号就是这样一种约定。然而,有时它也被认为是一种烦恼,这就是为什么open-paren-in-column-0-is-defun-start可以设置一个变量nil来抑制这种行为。

但是很难说在更改此设置时您可能会面临哪些性能问题。Lisp 语法非常有规律,除非您使用许多阅读器宏,所以,也许,这不会是一个问题。

于 2013-10-26T16:54:29.800 回答
0

如果相应地设置了defun-function的开头,即检查是否在注释或字符串中,则不需要这种转义。

于 2013-10-26T19:39:27.790 回答