我的工作邀请浏览包含`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无济于事
答案 0 :(得分:2)
elisp常量hif-cpp-prefix
控制hide-ifdef-mode
使用的基本语法。我猜你可以将它定义为如下所示。 (警告,这是未经测试的,因为我自己不使用verilog。)
(setq hif-cpp-prefix "\\(^\\|\r\\)[ \t]*\\(#\\|`\\)[ \t]*")
请注意,这是使用defconst
而不是defvar
定义的,因此hide-ifdef-mode
的编译版本仍可能使用原始值。将未编译的文件加载到Emacs中可能会解决这个问题。