如何匹配除特定字符串常量之后/之前的特定模式之外的所有内容


ATS(inline, const, unused) /* Variadic Macro */
OTS(inline, const, unused)

我试图仅在宏中匹配inlineconstunused关键字ATS。我尝试了ATS([^,]*)但它只匹配inline关键字。

编辑:我需要更改所有ATS参数的颜色。这仅适用于第一个参数。

(font-lock-add-keywords nil
  '(("ATS(\([^,]*\)" 1 font-lock-builtin-face)))

您可以使用定位字体锁定规则。这就像搜索中的搜索。下面的代码搜索AST( 。找到后,它会找到参数列表的末尾,并搜索其中的所有单词。

(defun foo ()
  (interactive)
  (setq font-lock-multiline t)
  (font-lock-add-keywords
   nil
   '(("\_<ATS("
      ("\_<\sw+\_>"
       ;; Pre-match form -- limit the sub-search to the end of the argument list.
       (save-excursion
         (goto-char (match-end 0))
         (backward-char)
         (ignore-errors
           (forward-sexp))
         (point))
       ;; Post-match form
       (goto-char (match-end 0))
       (0 font-lock-builtin-face))))))

这将匹配括号内的所有单词,即使它们分布在多行中。

预匹配表单有两个用途:它可以将点定位到合适的位置,并控制子搜索的延伸(其中nil表示行的末尾)。例如,可以使用匹配后表单将分数返回到其他关键字规则的良好位置。

当然,这可以扩展到只突出一组特定的单词,但我把它留作练习。

如果匹配项都是小写的,您可以简单地使用:

[a-z]+

确保正则表达式区分大小写。

这里有一个简单的方法:

加载库突出显示 highlight.el

然后调用命令/函数foo

(defun foo ()
  (interactive)
  (hlt-highlight-regexp-to-end "ATS([^)]*\(inline\)[^)]*)"
                               'font-lock-builtin-face  nil nil 1)
  (hlt-highlight-regexp-to-end "ATS([^)]*\(const\)[^)]*)"
                               'font-lock-constant-face nil nil 1)
  (hlt-highlight-regexp-to-end "ATS([^)]*\(unused\)[^)]*)"
                               'font-lock-warning-face  nil nil 1))

您也可以使用 font-lock-add-keywords 执行相同的操作。

(defun foo ()
  (interactive)
  (font-lock-add-keywords nil
                          '(("ATS([^)]*\(inline\)[^)]*)" (1 'font-lock-builtin-face t)))
                          'APPEND)
  (font-lock-add-keywords nil
                          '(("ATS([^)]*\(const\)[^)]*)"  (1 'font-lock-constant-face t)))
                          'APPEND)
  (font-lock-add-keywords nil
                          '(("ATS([^)]*\(unused\)[^)]*)" (1 'font-lock-warning-face t)))
                          'APPEND))

如果您知道它们都将以相同的顺序出现在同一个ATS sexp 中,那么您可以将单独的正则表达式合并为一个,并对 hlt-highlight-regexp-to-endfont-lock-add-keywords 进行一次调用。

最新更新