在Emacs Verilog模式下对齐代码



我习惯于在emacs中使用VHDL编写代码,它具有很好的美化功能,可以对齐信号赋值。Verilog模式有类似的东西吗?

转换:

r_Tx_Done <= 1'b1;
r_Clock_Count <= 0;
if (r_Done == 1'b1)
  begin
    r_SM_Main <= s_CLEANUP;
    o_Tx_Active <= 1'b0;
  end

:

r_Tx_Done     <= 1'b1;
r_Clock_Count <= 0;
if (r_Done == 1'b1)
  begin
    r_SM_Main   <= s_CLEANUP;
    o_Tx_Active <= 1'b0;
  end

Verilog模式可以很好地保持if else begin end对齐,但它不像我想要的那样对齐分配。请注意,if语句内部不与if语句外部的<=对齐。我想要每个开始/结束块分开处理

我使用verilog模式,我发现这是默认的工作

  1. 输入C-x h以突出显示整个缓冲区。
  2. 然后TAB让它美化一切。简单多了,也不那么乏味了!

根据这个答案,你可以尝试自定义align-rules-list

像这样的东西应该有帮助:

(eval-after-load "align"
  '(add-to-list 'align-rules-list
                '(verilog-assignment
                  (regexp . "\(\s-*\)<=")
                  (mode   . '(verilog-mode))
                  (repeat . nil))))

现在M-x align应该应用新的对齐规则

在GNU Emacs 24.3.1的Verilog模式下,您可以在任何赋值操作中将光标放置在非阻塞赋值操作符"<="上。例如,在代码的顶部:

r_Tx_Done <= 1'b1;
r_Clock_Count <= 0;

将游标放在任意一个赋值操作符上,并键入C-c =。代码现在变成

r_Tx_Done     <= 1'b1;
r_Clock_Count <= 0;

该操作将只在该代码段中执行。该操作不会跳转到任何其他语句:if-else、case、always等。为了在另一条语句中执行相同的操作,您必须进入该语句,单击赋值操作符并再次键入C-c =

最新更新