在Verilog中,您可以将代码块包含在单词'begin‘和'end’之间,如下所示:
if(foo) begin
x <= 1'b0;
y <= 1'b0;
end else begin
x <= x_d;
y <= y_d;
end
有没有办法在Emacs中将begin和end设置为括号,这样您就可以使用check-parens或类似的方法来查找任何不匹配的内容?
我尝试将这个(及其变体)添加到我的~/.emacs文件中,但它不喜欢它……
(modify-syntax-entry ?begin "(end" )
(modify-syntax-entry ?end ")begin" )
谢谢。
发布于 2012-05-19 03:22:51
不幸的是,Emacs的括号匹配基础结构不能理解很多多字符标记。Emacs-23.4中添加的新库SMIE部分旨在解决此问题。它允许主要模式描述语言的语法(在一种非常有限的语法中),然后像C-M-f和C-M-b这样的东西将知道如何跳过逻辑元素,例如从begin
跳到它匹配的end
。正如LindyDancer所指出的,缩进通常需要这样的东西,实际上,SMIE背后的主要动机是提供一个通用的缩进引擎。
现在Verilog不使用SMIE,但它实现了类似的导航命令。所以你可以试试像这样的东西
(defun sm-verilog-check-parens ()
(save-excursion
(goto-char (point-min))
(while (not (eobp))
(verilog-forward-sexp))))
尽管如此,我不知道如果verilog-forward-sexp
在意外时刻遇到缓冲区末尾,它是否会给您适当的警告/错误。
https://stackoverflow.com/questions/10633301
复制相似问题