使用emacs折叠/识别verilog代码中的当前`ifdef块

时间:2012-01-03 10:04:56

标签: emacs elisp verilog emacs23

我的工作邀请浏览包含`ifdef块的长verilog代码。我的主编是emacs。以下是一个典型的例子:

module Foo(
...
...
);

// Inputs, Outputs
...

`ifdef CONDITION_1
...
...    
`else // CONDITION_1
...
...    
`ifdef CONDITION_2
...
...
`endif //CONDITION_2
...
...
     foo <= 1'b1;
...
...
`endif // CONDITION_1

正如您所看到的,foo <= 1'b1;位于其他区块中。如果确定条件为假设我的观点位于foo <= 1'b1;行上,那么我可以直接移动到 ifdef CONDITION_1 或折叠代码以便我可以看到 CONDITION1 的方式?我尝试使用后向增量搜索,但在这种情况下,我最终在 ifdef CONDITION_2 我尝试使用hide-ifdef-mode但它识别#ifdef而不是`ifdef。这些块不使用括号。所以使用C-M-u无济于事

1 个答案:

答案 0 :(得分:2)

elisp常量hif-cpp-prefix控制hide-ifdef-mode使用的基本语法。我你可以将它定义为如下所示。 (警告,这是未经测试的,因为我自己不使用verilog。)

(setq hif-cpp-prefix "\\(^\\|\r\\)[ \t]*\\(#\\|`\\)[ \t]*")

请注意,这是使用defconst而不是defvar定义的,因此hide-ifdef-mode的编译版本仍可能使用原始值。将未编译的文件加载到Emacs中可能会解决这个问题。