2009-09-19 209 views
1

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

这是问题所在。主模式的注释以'!'开始并以换行符('\ n')结尾,并且我希望忽略缓冲区,因为注释以“%{”开始并以“}%”结尾。但是,我看不出任何方式将这两个定义为注释。在语法表中处理多字符注释分隔符的机制对于C来说非常具体。有没有人有任何其他的建议,文字属性,例如?

回答

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的描述,它会告诉你所有的点之后的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 

基本上,你需要设置注释启动和评论端序列,如在this part of the info pages说明。

我想你会想修改语法条目是这样的:

(modify-syntax-entry ?% ".14") 
(modify-syntax-entry ?{ "(}2") 
(modify-syntax-entry ?} "){3") 

虽然,我认为保持{}作为配对括号可能会混淆的东西......

+0

谢谢回复。不幸的是,在我来这里问这个问题之前,我已经尝试过了。我发现这个机制对C来说太具体了; 'b'型评论必须以'a'型评论的第一个符号开始,在这种情况下'!'和'%'。在C中,这些都是方便的'/' – Alex 2009-09-20 08:27:47