1

我如何在忽略该字符串中的注释的同时匹配字体锁定字体化的字符串?例如

(setq str-regexp "^foobar$"
      comment-regexp "/\\*[^*]*\\*/")

现在我如何返回匹配数据来字体化以下缓冲区文本中的字符串“foobar”?

foo/*comment*/bar
fo/*comment*/obar
fooba/*comment*/r

我可以轻松地从缓冲区子字符串中剥离注释,然后匹配该子字符串中的正则表达式,但我不知道如何将其转换回适合字体锁定的缓冲区标记/点。有任何想法吗?

4

3 回答 3

1

尝试在with-comments-hiddenlibrary 的宏中使用您的匹配代码hide-comnts.el

EmacsWiki 页面Hide Or Ignore Comments简要描述了宏和库。

于 2014-04-06T05:23:58.453 回答
0

也许您想从文本中删除所有评论:

使用以下正则表达式匹配注释:

((?:\/\*)(.*?)(?:\*\/))

然后将其替换''为仅导致未注释的文本。

结果文本:

foobar
foobar
foobar

演示

http://regex101.com/r/lC9vY1

于 2014-04-06T05:11:04.413 回答
0

字体锁定支持另一种匹配单词的方式。它允许您调用一个函数来为它完成工作,而不是使用正则表达式。

在此功能中,您可以逐字匹配单词,同时跳过注释。该函数的唯一要求是表现得像re-search-forward,即在找到匹配项并相应设置时返回非零match-data

由于匹配的单词将包含注释,因此您必须编写字体锁定规则,以便它会为单词着色,但保持注释不变。您可以通过将规则中的 OVERRIDE 标志设置为keepappend(取决于您想要做什么)来做到这一点。

于 2014-04-06T08:54:15.800 回答