1

一段时间以来,我一直在使用 Emacs 创建和修改 Verilog 代码。但是,在 Verilog 模式下,当我尝试使用 emacs 命令插入“if”语句时遇到了一个小问题:

C-c C-t ?

以下是在上述场景中如何创建语句的示例:

if (a<b) begin
// the rest of the code

但是我需要emacs在下一行插入“开始”,如下所示:

if (a<b)
begin
//rest of the code

在挖掘了可用的 Verilog 自定义选项之后,我发现了一个名为的选项 Verilog Indent Begin After If,我认为它应该会产生上述效果。然而切换这个选项并没有给我任何可见的变化。

任何帮助将不胜感激。

4

1 回答 1

3

查看代码,您将看到该功能:

(define-skeleton verilog-sk-if
  "Insert a skeleton if statement."
  > "if (" '(verilog-sk-prompt-condition) & ")" " begin" \n
  > _ \n
  > (- verilog-indent-level-behavioral) "end " \n )

实际上定义了一个骨架。只需复制粘贴并添加另一个换行符:

(define-skeleton my-verilog-sk-if
  "Insert a skeleton if statement."
  > "if (" '(verilog-sk-prompt-condition) & ")" \n " begin" \n
  > _ \n
  > (- verilog-indent-level-behavioral) "end " \n )

现在我们只需要在 verilog 模式下将我们的函数与旧函数挂钩:

(add-hook 'verilog-mode-hook
          '(lambda ()
             ;; this is quite the hack because we don't respect
             ;; the usual prefix of verilog-mode but sufficient for us
             (define-key verilog-mode-map "\C-c\C-t?"
                         'my-verilog-sk-if)))
于 2012-08-07T13:01:42.957 回答