Emacs C++;模式:突出显示强制类型转换和大小 我使用标准(发货)Emacs C++模式,但我有点痒,我想被抓伤。我将如何正确地强调C++中的大小和类型?

Emacs C++;模式:突出显示强制类型转换和大小 我使用标准(发货)Emacs C++模式,但我有点痒,我想被抓伤。我将如何正确地强调C++中的大小和类型?,emacs,syntax-highlighting,Emacs,Syntax Highlighting,例如: 演员阵容 Type*pointer=reinterpret\u cast(原件) Sizeof std::cout将这些表达式添加到您的.emacs,或使用M-:对其求值 Sizeof(这是两种情况中比较简单的一种) 正则表达式突出显示括号内的字母数字、空格和星号的任何组合(由括号表达式[…]表示;关于语法,请参见下面的注释),前面加上sizeof (font-lock-add-keywords 'c++-mode '(("\\<sizeof[[:space:]]*(\\([[

例如:

  • 演员阵容

    Type*pointer=reinterpret\u cast(原件)

  • Sizeof


    std::cout将这些表达式添加到您的
    .emacs
    ,或使用
    M-:
    对其求值

    Sizeof(这是两种情况中比较简单的一种)

    正则表达式突出显示括号内的字母数字、空格和星号的任何组合(由括号表达式
    […]
    表示;关于语法,请参见下面的注释),前面加上
    sizeof

    (font-lock-add-keywords 'c++-mode
      '(("\\<sizeof[[:space:]]*(\\([[:alnum:][:space:]*]+\\))"
      1 font-lock-type-face t)))
    
    同样,“1
    2”选择相应的子表达式

    <强>请注意:< /强>类型名的正则表达式不完全符合C++语法。例如,emacs会很高兴地突出显示像

    sizeof(int*32)
    这样的废话


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

    你说的“正确突出显示”是什么意思?您希望在声明变量时以与类型名相同的方式突出显示类型名,还是希望以其他更“合适”的方式突出显示类型名?我希望在声明变量时突出显示类型名,是的。鉴于在
    sizeof(X)
    中,X是类型还是变量完全取决于上下文,你希望它有多精确?
    (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))))