Emacs对齐模式不会对齐注释/内联注释

时间:2014-04-30 00:01:58

标签: emacs elisp verilog emacs24

我想在此verilog代码示例中对齐注释/内联注释。我计划通过突出显示区域并执行M-x align来分别对齐每个部分。我找到了对齐verilog代码的lisp代码,我让它工作得很好,但是我无法得到评论以适应我的生活。我开始以对齐方式认为它的禁用。

module spi_jstk ( 
                  input        clk, // System Clock (40MHz)
                  input        reset, // Async Reset
                  input        START, // Initialize SPI Transfer
                  input [39:0] DATA, // Input Data to Transfer
                  input        SS, // Chip Select
                  output       SCLK, // Serial Clock
                  output       NEW, // NEW SIGNAL
                  input        MISO, // Master In Slave Out
                  output       MOSI );  // Master Out Slave In

   test0  = signal; // comment
   test   = signal;   // comment
   test1  = signal;  // comment
   test11 = signal; // comment

   //
    //
   //
endmodule

这是elisp:

(defcustom align-verilog-rules-list
    `(
         (verilog-declaration
             (regexp . "\\(logic\\|input\\|output\\|inout\\|wire\\|reg\\)\\s-*\\(\\s-+[[][^]]+[]]\\|reg\\|\\)\\(\\s-+\\)")
             (group . (3)))

         (verilog-asgn_param
             (regexp . "\\(assign\\|parameter\\)\\(\\s-+\\)\\S-")
             (group . (2)))

         (verilog-assign
             (regexp . "\\S-+\\(\\s-*\\)[!=><]+\\(\\s-*\\)\\S-")
             (group . (1 2)))

         (verilog-ports-no-comment
             (regexp . "[.][a-zA-Z0-9_]+\\(\\s-+\\)\\S-")
             (group . (1)))

;; Want to add code to align comments here.

         )
    "Verilog alignment rules."
    :type  'align-rules-list-type
    :group 'align)

(put 'align-verilog-rules-list 'risky-local-variable t)

(defun verilog-extras-hook ()
    (setq align-mode-rules-list align-verilog-rules-list))

(add-hook 'verilog-mode-hook 'verilog-extras-hook t)

;; Align with spaces
(setq-default indent-tabs-mode nil)

我需要添加什么来对齐评论?

这是奇怪的部分,我可以添加一个调用'align-regexp'的函数来实现这个功能(见下文)。另外,当我将相同的正则表达式应用于上面的“对齐”函数时,它不起作用。

使用'align-regexp'工作:

(defun align-comments (beg end)
    (interactive "r")
    (align-regexp beg end "\\(\\s-*\\)//\\(\\s-*\\)" 1 1 t))

我似乎错过了一些东西,因为我无法理解正则表达式或如何将它们应用于这些函数以便我的生活。我一直在努力解决这个问题。

此外,如果它对任何人有帮助,这里的原始代码基于: https://groups.google.com/forum/#!topic/gnu.emacs.help/odgMEJGd6Os

1 个答案:

答案 0 :(得分:0)

到目前为止,我已经提出了这个问题(过时,见下文):

     (verilog-comment
         (regexp . "\\S-+\\(\\s-*\\)[/]+\\(\\s-*\\)\\S-")
         (group . (1 2)))

这似乎几乎可以做我想要的,但不适用于非内联注释(在verilog代码的最底部的第三组注释)。

更新(最新!):

     (verilog-comment
         (regexp . "\\(\\s-*\\)[/]+\\(\\s-*\\)\\S-")
         (group . (1 2)))

看起来我需要在一开始就摆脱空白表达式\ S- +由于某种原因。似乎混淆了emacs regexp,这很奇怪,因为它看起来很有效。无论如何,我发现了一个名为M-x re-builder的漂亮工具,它真正帮助想象了到底是怎么回事。希望这有助于将来的某个人!