我正在尝试使用 ELisp Syntax-Table-Comments 设置 Haskell 风格的注释,但我不太明白。
在 Haskell 中,有两种基本类型的注释
--
表示以 \n
结尾的单行注释
{-
表示以-}
结尾的多行注释,需要注意的是,这些是可以嵌套的
多行注释可以这样完成:
(defvar my-syntax-table
(let ((st (make-syntax-table)))
(modify-syntax-entry ?{ ". 1n" st)
(modify-syntax-entry ?- ". 23n" st)
(modify-syntax-entry ?} ". 4n" st)
st))
单行注释可以这样完成:
(defvar my-syntax-table
(let ((st (make-syntax-table)))
(modify-syntax-entry ?- ". 12" st)
(modify-syntax-entry ?\n ">" st)
st))
根据文档,我可以使用
b
设置替代方案。但是,b
适用于序列的第二个字符,在两种情况下都是 -
。因此,当我尝试使用替代方案组合这些时,不可能进行多行和单行注释。
我已经看到了这件事,所以我知道这是可能的。但是,我不知道该怎么做。如有任何帮助,我们将不胜感激。
Haskell 模式使用
(modify-syntax-entry ?\{ "(}1nb" table)
(modify-syntax-entry ?\} "){4nb" table)
(modify-syntax-entry ?- "_ 123" table)))
(modify-syntax-entry ?\n ">" table)
我自己在实现带有 Haskell 风格注释的模式时遇到了这个问题,这似乎是解决方案:
(modify-syntax-entry ?- ".123" table)
(modify-syntax-entry ?\{ "(}1nc" table)
(modify-syntax-entry ?\} "){4nc" table)
(modify-syntax-entry ?\n ">" table)
haskell-mode
中的定义不太正确;他们使用标志 1 和 4 设置“b”注释样式,但“b”仅适用于 2 和 3。使用较新的(尽管绝不是新的)“c”样式,您可以创建一种注释类型:任何角色都可以区分,而不仅仅是内在的角色。
通过将
-
标记为标点符号而不是评论起始符,您可以避免用单个破折号开始评论。
有关注释语法标志如何工作的更多详细信息,请参阅文档。