我希望Emacs的语法运动功能忽略缓冲区的某些区域;即正确解析非连续区域。如果您可以将要忽略的区域定义为注释并将parse-sexp-ignore-comments变量设置为true,则可以有效地完成此操作。
这是问题所在。主模式的评论以'!'开头并以新行('\ n')结束,我想忽略缓冲区域,因为注释以“%{”开头,以“}%”结尾。但是,我看不出有任何方法可以将这两者定义为注释。在语法表中处理多字符注释分隔符的机制对于C来说太具体了,不能在这里使用。有没有人有任何其他建议,例如文本属性?
答案 0 :(得分:1)
是的,您可以像C一样修改语法表。您可以阅读语法表here。基本上,您需要将%
定义为标点符号和注释字符,与{
和}
相同。
C中/
字符的描述为:
character: / (47, #o57, #x2f)
preferred charset: ascii (ASCII (ISO646 IRV))
code point: 0x2F
syntax: . 124b which means: punctuation,
is the first character of a comment-start sequence,
is the second character of a comment-start sequence,
is the second character of a comment-end sequence (comment style b)
注意:要获取字符的描述,请键入M-x describe-char
,它将告诉您关于字符后的所有字符。
同样,*
字符具有描述(在C中):
character: * (42, #o52, #x2a)
preferred charset: ascii (ASCII (ISO646 IRV))
code point: 0x2A
syntax: . 23 which means: punctuation,
is the second character of a comment-start sequence,
is the first character of a comment-end sequence
基本上,您需要设置comment-start和comment-end序列,如this part of the info pages中所述。
我认为你想要修改这样的语法条目:
(modify-syntax-entry ?% ".14")
(modify-syntax-entry ?{ "(}2")
(modify-syntax-entry ?} "){3")
尽管如此,我认为将{
和}
保持为一对匹配的括号可能会让事情变得混乱......