在Emacs中,我如何对齐一组文字:
signal slv4 : std_logic_vector(3 downto 0);
signal slv16 : std_logic_vector(15 downto 0);
signal slv8 : std_logic_vector(7 downto 0);
signal slv32 : std_logic_vector(32 downto 0);
所以它看起来像这样
signal slv4 : std_logic_vector( 3 downto 0);
signal slv16 : std_logic_vector(15 downto 0);
signal slv8 : std_logic_vector( 7 downto 0);
signal slv32 : std_logic_vector(32 downto 0);
基本上我想在“downto”之前纠正这些数字;另一个副作用是文本是正确的(半冒号排列)。
我将如何实现这一目标?我玩M-x align
和M-x align-regexp
,但我似乎无法得到我正在寻找的东西。
我也在使用vhdl-mode所以也许它内置了一些内容?
答案 0 :(得分:0)
我不认为在vhdl模式中存在这样的事情,因为在文本中间需要空格。如果只是正确对齐,您可能会使用tab
行为。在这种情况下,您可以使用宏。
答案 1 :(得分:0)
在第一次运行中,检测到最大填充,而不是在给定填充的情况下递归调用。
如果需要不同的东西,请在里面编辑`this-regexp'。 也许硬编码的开头“(”以连接形式需要编辑而不是。
(defun my-numbers-padded (&optional beg end len)
"Pad numbers as given in example string "
(interactive "*")
(let* ((beg (cond (beg)
((use-region-p)
(region-beginning))
(t (point-min))))
(end (cond (end (copy-marker end))
((use-region-p)
(copy-marker (region-end)))
(t (copy-marker (point-max)))))
(this-regexp "^\\([^(]+\\)\(\\([0-9]+\\)\\(.+\\)$")
(len len)
lenmax
(var (and len (concat "(format \"%" (number-to-string len) "s\" (match-string-no-properties 2))"))))
(goto-char beg)
(if len
(while (re-search-forward this-regexp nil t 1)
(setq erg (eval (car (read-from-string var))))
(replace-match
(concat (match-string-no-properties 1) "\(" erg (match-string-no-properties 3))))
(while (re-search-forward this-regexp nil t 1)
(setq current-length (length (match-string-no-properties 2)))
(if (and lenmax (< lenmax current-length))
(setq lenmax current-length)
(unless lenmax (setq lenmax current-length))))
(my-padding-numbers beg end lenmax))))
答案 2 :(得分:0)
这是我目前使用的(工作正常):
(defun my-align-downto (beg end)
(interactive "r")
(align-regexp beg end "\\([0-9]* downto*\\)" -1 0 t))
我想我会更进一步,根据本页最底部的信息创建我自己的'对齐钩子':http://www.emacswiki.org/emacs/AlignCommands#toc8
(add-hook 'align-load-hook (lambda ()
(add-to-list 'align-rules-list
'(downto-align
(regexp . "\\([0-9]* downto*\\)")
(group . -1)
(spacing . 0)
(modes . vhdl-mode)
(repeat . t)))))
我没有得到任何结果。 :(
vhdl-mode是否会覆盖这些对齐规则..或者我只是没有正确执行某些操作?