首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Emacs中定义多字符括号

在Emacs中定义多字符括号
EN

Stack Overflow用户
提问于 2012-05-17 17:47:12
回答 1查看 508关注 0票数 7

在Verilog中,您可以将代码块包含在单词'begin‘和'end’之间,如下所示:

代码语言:javascript
运行
复制
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文件中,但它不喜欢它……

代码语言:javascript
运行
复制
(modify-syntax-entry ?begin "(end" )
(modify-syntax-entry ?end ")begin" )

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-19 03:22:51

不幸的是,Emacs的括号匹配基础结构不能理解很多多字符标记。Emacs-23.4中添加的新库SMIE部分旨在解决此问题。它允许主要模式描述语言的语法(在一种非常有限的语法中),然后像C-M-f和C-M-b这样的东西将知道如何跳过逻辑元素,例如从begin跳到它匹配的end。正如LindyDancer所指出的,缩进通常需要这样的东西,实际上,SMIE背后的主要动机是提供一个通用的缩进引擎。

现在Verilog不使用SMIE,但它实现了类似的导航命令。所以你可以试试像这样的东西

代码语言:javascript
运行
复制
(defun sm-verilog-check-parens ()
  (save-excursion
    (goto-char (point-min))
    (while (not (eobp))
      (verilog-forward-sexp))))

尽管如此,我不知道如果verilog-forward-sexp在意外时刻遇到缓冲区末尾,它是否会给您适当的警告/错误。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10633301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档