2012-10-10 22 views
8

我想在c/C++缓冲区中搜索正则表达式,但我想避免表达式匹配注释区域。有没有一种方法使用c模式来了解一堆文本是否在注释区域内(或点在注释区域内)?emacs lisp和c-mode:当我在评论区

回答

10

明白这一点的方法是用syntax-ppss这在C/C++,最重要的模式运作。例如。 (null (nth 8 (syntax-ppss)))将是非零,当且仅当您不在字符串或评论中。

0
(defun re-search-forward-not-in-comment (regexp) 
    "Search forward first regexp not inside a comment. " 
    (interactive 
    (list (read-from-minibuffer "Regexp: "))) 
    (while (and (re-search-forward regexp nil t 1) 
      (and (nth 8 (syntax-ppss))(nth 4 (syntax-ppss)))))) 
+3

请提供的不仅仅是一个链接。 – skolima

+4

你可以在这里粘贴代码来修复你的答案。这样,链接烂掉后,答案仍然有用。 –

+0

如果你喜欢它,为什么不复制它,它是免费的。 –