什么是hideif
介绍一个Emacs自带的插件,位于emacs\lisp\progmodes\hideif.el,它能将代码中被#if 0…#else…#endif注释的无效代码,标记为自定义的格式(font face),下图中灰色斜体的代码就是被标记的部分:
对于含大量预编译指令的代码,便于区分。
开启
在.emacs中添加:
(require 'hideif)
(setq hide-ifdef-initially t)
(add-hook 'c-mode-common-hook
(lambda ()
(setq hide-ifdef-shadow t)
(setq hide-ifdef-mode t)
(hide-ifdefs)
))
(setq hide-ifdef-shadow t)时,无效代码变为灰色。
(setq hide-ifdef-shadow nil)时,无效代码被折叠隐藏变为...,如下图:
if条件
以设置A=1,C=2为例:
(eval-after-load "hideif"
'(progn
(setq hide-ifdef-env
'((A . 1)
(C . 2)))))
如果表达式很多,可以单独用一个文件来管理,下面是hideif-table.el文件的内容:
(defconst project1 t)
(defconst project2 nil)
(eval-after-load "hideif"
'(progn
(setq hide-ifdef-env
'((A . 1)
(C . 2)))))
(if project1
(setq hide-ifdef-env (append '(
(B . 3)
(D . 4)
) hide-ifdef-env)))
(if project2
(setq hide-ifdef-env (append '(
(B . 6)
(D . 7)
) hide-ifdef-env)))
在.emacs中(load-file “the path of hideif-table.el”)来加载,更改defconst定义可以切换多组定义。
自定义格式
设置Hide Ifdef Shadow face的属性即可。
可是它在哪?我比较水,是用鼠标点出来的,Emacs菜单“Options”->“Customize Emacs”->“All Settings Matching…”输入Hide Ifdef,在匹配结果的最后一项
建议
在使用hideif时,Emacs常常自动弹出*Messages*栏,显示hideif遇到无法解析的代码,Bad #if expression警告,还跟着一大堆代码,同时会造成Emacs卡死。感觉没什么用,如果你也想屏蔽这个警告,可以这样:将emacs\lisp\progmodes\hideif.el的line407的
(t (error "Bad #if expression: %s" (buffer-string))
改为
(t (error "Bad #if expression")
然后在Emacs中用
byte-compile-file
对hideif.el重新编译生成hideif.elc即可。