颜色声明的变量


11

我正在寻找一种简单的方法来使emacs记住C / C ++中单个函数中的声明变量。“简单”是指没有任何外部软件包,而在配置文件中仅包含一些省略号行。

我的默认Emacs配置在声明时将变量名称涂成黄色,但在使用时将其涂成白色。

char toto; // 'char' is green, 'toto' is yellow

toto = 42; // 'toto' is white

我也想将相同功能/范围的每个“ toto”都涂成黄色。

我已经看过这个问题,但是我想简单一些。我还尝试了使用字体锁定模式进行操作,但是我没有成功使某些内容适应于变量名。

我已经有了C ++类成员名称的想法(使用名称模式),所以我只想在这里匹配一个局部变量。


3
这可能比看起来难。nobugs.org/developer/parsingcpp
wasamasa 2015年

8
您为什么不想使用任何软件包?如果有提供此功能的软件包,则与从头开始创建功能相比,几乎可以肯定的是,安装它所需的配置减少。
泰勒(Tyler)

11
这听起来很像color-identifiers-mode包装。(将其发布为评论是因为您说过您不想考虑外部软件包。)
Aaron Harris

7
每个“外部软件包”也可以描述为“配置文件中的某些省略行”。避免以某人以软件包形式提供代码而存在的代码是荒谬的。
菲利浦斯,2016年

您有什么版本的Emacs?
DA Vincent

Answers:


1

您可以为变量方案召集一个正则表达式,它要匹配(伪正则表达式代码)[char|other|types] [a-z];[a-z] =*;然后将其添加到您的mode的font-lock关键字列表中;在“自定义关键字”页面的手册中:

例如,以下代码为C模式添加了两种字体化模式:一种用于对单词“ FIXME”(即使在注释中)进行字体化,另一种用于对单词“ and”,“ or”和“ not”作为关键字进行字体化。

 (font-lock-add-keywords 'c-mode
  '(("\\<\\(FIXME\\):" 1 font-lock-warning-face prepend)
    ("\\<\\(and\\|or\\|not\\)\\>" . font-lock-keyword-face)))

本示例仅影响C模式。要将相同的模式添加到C模式及其派生的所有模式,请改为执行以下操作:

 (add-hook 'c-mode-hook
  (lambda ()
   (font-lock-add-keywords nil
    '(("\\<\\(FIXME\\):" 1 font-lock-warning-face prepend)
      ("\\<\\(and\\|or\\|not\\)\\>" .
       font-lock-keyword-face)))))
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.