如何在emacs lisp模式下禁用调用约定示例的特殊处理?

如何在emacs lisp模式下禁用调用约定示例的特殊处理?,emacs,clojure,elisp,docstring,Emacs,Clojure,Elisp,Docstring,如上所述,emacs lisp模式提供了对从第一列开始的DocString中的s表达式的特殊处理。这要求它们用反斜杠转义,以避免以后在文件中破坏字体锁定 这可能是elisp的一项功能,但不幸的是,在其他lisp模式中,为了方便起见重用了emacs lisp模式,而这些模式没有对docstring中的表达式进行特殊处理,如所述/所示 我的问题是,这种“后代”模式是否有办法将emacs lisp模式配置为忽略DocString中的“调用约定表达式”?简单的答案是否定的 更长的答案是,其他模式都被打破

如上所述,emacs lisp模式提供了对从第一列开始的DocString中的s表达式的特殊处理。这要求它们用反斜杠转义,以避免以后在文件中破坏字体锁定

这可能是elisp的一项功能,但不幸的是,在其他lisp模式中,为了方便起见重用了emacs lisp模式,而这些模式没有对docstring中的表达式进行特殊处理,如所述/所示


我的问题是,这种“后代”模式是否有办法将emacs lisp模式配置为忽略DocString中的“调用约定表达式”?

简单的答案是否定的

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

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

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

当然,这意味着您不能直接利用Emacs文档特性。您还需要定义特定于模式的doc命令,例如,将现有的doc函数(如
descripe function
)包装为提取模式伪doc字符串和DTRT的代码,遵循模式的约定,而不是Emacs doc string约定


但是我认为最简单的方法是将模式调整到现有的Emacs行为,这样它就可以DTRT了。

简单的答案是否定的

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

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

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

当然,这意味着您不能直接利用Emacs文档特性。您还需要定义特定于模式的doc命令,例如,将现有的doc函数(如
descripe function
)包装为提取模式伪doc字符串和DTRT的代码,遵循模式的约定,而不是Emacs doc string约定


但是我认为最简单的方法是根据现有的Emacs行为调整模式,这样它就可以DTRT了。

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

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


但很难说更改此设置时可能会遇到哪些性能问题。Lisp语法是非常规则的,除非您使用许多读卡器宏,所以,这可能不会是一个问题。

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

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

但很难说更改此设置时可能会遇到哪些性能问题。Lisp语法是非常规则的,除非你是