gpt4 book ai didi

emacs - 在 Emacs 中定义多字符括号

转载 作者:行者123 更新时间:2023-12-04 12:48:55 25 4
gpt4 key购买 nike

在 Verilog 中,您将代码块放在单词“开始”和“结束”之间,如下所示:

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" )

谢谢。

最佳答案

遗憾的是,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如果它在意外的时刻撞到缓冲区的末尾,会给你适当的警告/错误。

关于emacs - 在 Emacs 中定义多字符括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10633301/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com