我想在此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
答案 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
的漂亮工具,它真正帮助想象了到底是怎么回事。希望这有助于将来的某个人!