Emacs C++模式:突出显示强制转换和大小

Joh*_*one 5 emacs syntax-highlighting

我正在使用标准(发货)Emacs C++模式,但我有一点点痒,我正在寻找划痕.我如何正确地突出显示sizeof中的类型和C++中的强制转换

例如:

  1. 演员

    Type * pointer = reinterpret_cast <Type *> (original);

  2. SIZEOF

    std::cout << sizeof (Type) << "\n";

Flo*_*enn 4

将这些表达式添加到您的 中.emacs,或使用 评估它们M-:

Sizeof(这是两种情况中更容易的一种)

正则表达式突出显示括号[...]内字母数字、空格和星号的任意组合(由括号表达式表示;有关语法,请参阅下面的注释)sizeof

(font-lock-add-keywords 'c++-mode
  '(("\\<sizeof[[:space:]]*(\\([[:alnum:][:space:]*]+\\))"
  1 font-lock-type-face t)))
Run Code Online (Sandbox Code Playgroud)

该数字告诉 emacs 仅使用 Face1突出显示第一个子表达式(由 标记) ;意味着覆盖任何先前的突出显示。\\(...\\)font-lock-type-facet

您可以使用 来查看和更改可用的面M-x customize group [RET] font-lock-faces [RET]

C++ 风格转换

我不确定您想要突出显示哪种类型名称 - “原始”或要转换的类型名称。该荧光笔标记了以下两个内容:

(font-lock-add-keywords 'c++-mode
  '(("\\<[[:alnum:]]+_cast[[:space:]]*<\\([[:alnum:][:space:]*]+\\)>[[:space:]]*(\\([[:alnum:][:space:]*]+\\))"
  (1 font-lock-type-face t)
  (2 font-lock-type-face t))))
Run Code Online (Sandbox Code Playgroud)

再次,'1 and2`选择相应的子表达式。

请注意: 类型名称的正则表达式并不完全符合 C++ 语法。例如,emacs 会很高兴地突出显示诸如sizeof(int * 32).

另外,我的解决方案没有考虑帕维尔在对你的问题的评论中提到的问题;您也可以sizeof在变量上使用它,这需要不同的突出显示。我认为这不可能,除非在字体锁定代码中实现完整的 C 解析器。