spacemacs 如何识别C/C++中的#ifdef并作显示?

比如下面这段代码

#ifdef (CONFIG_ARM64_64K_PAGES) 
#define pud_sect(pud)		(0)
#define pud_table(pud)		(1)
#else
#define pud_sect(pud)		((pud_val(pud) & PUD_TYPE_MASK) == \
				 PUD_TYPE_SECT)
#define pud_table(pud)		((pud_val(pud) & PUD_TYPE_MASK) == \
				 PUD_TYPE_TABLE)
#endif

如果CONFIG_ARM64_64K_PAGES为真,那么#else后面的就灰色显示,#else前面的就正常显示。 如果CONFIG_ARM64_64K_PAGES为假,那么#else后面的就正常显示,#else前面的就灰色显示。

今天在同事vscode上看到一个这个功能,感觉很好用,不知道emacs有没有办法实现。 Google到hide-ifdef-mode模式,但是enable后显示好像没什么变化。

我记得之前用 Spacemacs 时,有个项目正确生成了 compile_commands.json,language server 用的是 ccls,看到过这样的效果。

要用 hideif 的话得自己用 hide-ifdef-define 来添加对应的宏定义,或者也可以自己写个简单的读取函数从 compile_commands.json 里解析出来新定义的宏。

如果你用 ccls 的话是自带了这个功能。变灰度的区域叫做 skipped region, ccls 开启 semantic highlight 即可。

https://github.com/MaskRay/emacs-ccls/blob/master/ccls-semantic-highlight.el

多谢,目前用的clangd,不知道它有没有这个功能。

多谢,目前用的clangd,不知道有没有这个功能。

clangd 目前还没有这个功能哦,现在这个功能是 ccls 独家的