繁体   English   中英

在Emacs Verilog模式中对齐代码?

[英]Align code in Emacs Verilog Mode?

我习惯用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. 键入Cx 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))))

现在Mx align应该应用新的对齐规则。

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

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

将光标放在任一赋值运算符上并键入Cc = 代码现在将成为

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

此操作仅在该部分代码中执行。 此操作不会跳转到任何其他语句:if-else,case,always等。为了在另一个语句中执行相同的操作,您必须进入该语句,单击赋值运算符并再次键入Cc =

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM