您可能需要按照Emacs Wiki和ErgoEmacs中的描述制作自定义语法表:
例如,对于我的 cql 模式,我使用以下来区分/* .. */
块注释和/--
或//
单行/行尾注释。
(defvar cql-mode-syntax-table
(let ((st (make-syntax-table)))
(modify-syntax-entry ?/ ". 124b" st)
(modify-syntax-entry ?* ". 23" st)
;; double-dash starts comments
(modify-syntax-entry ?- ". 12b" st)
;; newline and formfeed end comments
(modify-syntax-entry ?\n "> b" st)
(modify-syntax-entry ?\f "> b" st)
st)
"Syntax table for CQL mode")
并在派生模式的声明中指定:
(set-syntax-table cql-mode-syntax-table)
功能文档中描述了含义modify-syntax-entry
: for /
-1
表示字符可以开始注释,2
表示它也可以是序列中的第二个字符,4
- 它完成注释,b
它可以是注释类型b
。因为*
它说它可能是评论类型a
(默认类型)的倒数第二个或倒数第二个字符。
同样,因为-
它声明它可以是评论类型中的第一个和第二个字符b
。
在您的情况下,它可能看起来如下(未经测试):
(defvar some-mode-syntax-table
(let ((st (make-syntax-table)))
(modify-syntax-entry ?# ". 1b" st)
;; double-; starts comments
(modify-syntax-entry ?; ". 12b" st)
;; newline and formfeed end comments
(modify-syntax-entry ?\n "> b" st)
(modify-syntax-entry ?\f "> b" st)
st)
"Syntax table for some mode")