emacs:非连续缓冲区

时间:2009-09-19 20:01:11

标签: emacs elisp

我希望Emacs的语法运动功能忽略缓冲区的某些区域;即正确解析非连续区域。如果您可以将要忽略的区域定义为注释并将parse-sexp-ignore-comments变量设置为true,则可以有效地完成此操作。

这是问题所在。主模式的评论以'!'开头并以新行('\ n')结束,我想忽略缓冲区域,因为注释以“%{”开头,以“}%”结尾。但是,我看不出有任何方法可以将这两者定义为注释。在语法表中处理多字符注释分隔符的机制对于C来说太具体了,不能在这里使用。有没有人有任何其他建议,例如文本属性?

1 个答案:

答案 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")

尽管如此,我认为将{}保持为一对匹配的括号可能会让事情变得混乱......