簡體   English   中英

Emacs對齊方式將不對齊注釋/嵌入式注釋

[英]Emacs align mode will not align comments/inline comments

我想在此Verilog代碼示例中對齊注釋/內嵌注釋。 我計划通過突出顯示區域並進行Mx align分別對齊每個部分。 我發現Lisp代碼可以對齊Verilog代碼,並且可以正常工作,但是我無法獲得注釋以使我一生都可以對齊。 我開始認為它在對齊模式下已禁用。

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”功能時,它將不起作用。

這使用'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

到目前為止,我已經提出了這一點(已過時,請參見下文):

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

這似乎幾乎可以滿足我的要求,但不適用於非內聯注釋(第三組注釋位於verilog代碼的最底部)。

更新(最新!):

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

看起來由於某種原因,我一開始需要擺脫空格表達式\\ S- +。 似乎使emacs regexp混淆了,這很奇怪,因為它看起來有效。 無論如何,我找到了一個名為Mx re-builder的好工具,它確實有助於可視化到底發生了什么。 希望這對以后的人有所幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM