正如here所述,emacs-lisp-mode提供了在第一列中开始的文档字符串中对s表达式的特殊处理。这需要使用反斜杠进行转义,以避免以后在文件中删除字体锁。
这可能是elisp的一个功能,但是在其他lisp模式中很不幸,这些模式为了方便而重用了emacs-lisp-mode,没有对文档字符串中的表达式进行特殊处理,如上所述/ here所示。 / p>
我的问题是,有没有办法让这种“后代”模式配置emacs-lisp-mode来忽略文档字符串中的“调用约定表达式”?
答案 0 :(得分:1)
简短的回答是否定的。
答案越长,那些其他模式就会被打破。在这方面,他们应该适应Emacs Lisp。没有理由没有,是吗?使用变通办法(例如缩进所有文档字符串行)是一个坏主意,例如在您提供的链接(及其链接的重复帖子)中建议。
Emacs doc字符串不是普通字符串。它们有几个特殊属性,包括\\[...]
,\\{...}
和\\<...>
的处理,以及您在此提及的属性。
如果某些模式不能调整为Emacs doc字符串,那么它应该使用定义所需内容的宏而不为它们创建Emacs doc字符串,而是通过以所需的特殊方式处理不同的字符串参数。 IOW,创建与模式所需内容相对应的伪doc字符串,而不是Emacs想要的内容。
当然,这意味着您无法直接利用Emacs文档功能。您还需要定义特定于模式的doc命令,例如,将describe-function
现有的doc函数包装为拾取模式的伪doc字符串和DTRT的代码,遵循模式的约定而不是Emacs文档字符串约定。
但我认为最简单的方法是将模式调整为现有的Emacs行为,以便DTRT。
答案 1 :(得分:0)
许多Emacs编程模式和各种Lisp模式也不例外,它们都是基于具有正则表达式的解析器实现的。遗憾的是,这让编辑很少知道正在编辑的文档。例如,Eclipse对于如何编辑代码有着截然不同的想法,这种代码更加结构化,而JetBrain MPS编辑器在这个意义上更加严格和结构化(几乎就像电子表格一样)。 这使得Emacs模式更快,更容易实现,但它也意味着支持正确缩进的代码,语法验证和突出显示每次编辑时都必须重新解析更多文本。 CEDET,afaik,正试图解决这个问题。
因此,从历史上看,已经有一些约定旨在减少每次编辑时要解析的代码量。第一列中的括号是一种这样的约定。然而,它也被认为是一种烦恼,这就是为什么有一个open-paren-in-column-0-is-defun-start
变量可以设置为nil
来抑制这种行为。
但是很难说出更改此设置时您可能遇到的性能问题究竟是什么。 Lisp语法是非常规则的,除非你使用了很多读者宏,所以,这可能不会是一个问题。
答案 2 :(得分:0)
如果相应地设置了开始定义函数,即检查注释或字符串中是否应该不需要这样的转义。