每行开头的空格组的正则表达式

5

我正在尝试修复 Emacs 中一个与高亮缩进相关的正则表达式。目前它的工作方式是通过每隔 %s 个空格进行一次高亮。

"\\( \\) \\{%s\\}"

以下是关于一些Verilog代码行为的示例结果:
当前的正则表达式对于每行开头的缩进工作得很好。然而,有一个不良后果是,序列中的空格也被正则表达式匹配,但它们并不在行的开头。我想修改正则表达式以匹配上述行为,但仅限于行的开头。这是我想要的(我不得不手动绘制):
我尝试过以下方法。从结果可以看出,行为不正确。
"^\\(\\( \\) \\{%s\\}\\) \\{1,\\}"

结果:

在此输入图片描述

还尝试了

"^\\(\\( \\) \\{%s\\}\\)\\{1,\\}"

结果:

在此输入图像描述

下面是相关代码,但很抱歉这不是一个可用的示例。请使用上面的链接查看可用示例。

(set (make-local-variable 'highlight-indentation-current-regex)
     (format "\\( \\) \\{%s\\}" (- highlight-indentation-offset 1)))
(font-lock-add-keywords nil `((,highlight-indentation-current-regex
                               (1 'highlight-indentation-face))))

我对正则表达式很熟悉,但我不熟悉字体锁定是如何完成的。如果您愿意解释一下,我可能能够提供帮助。这只是编写匹配并指定其中应突出显示哪个组的正则表达式的问题吗? - Malabarba
如果是这种情况,那么你的第二个正则表达式似乎有一个多余的空格。"^\(\( \) \{%s\}\)\{1,}" 可以工作吗? - Malabarba
1
你可以尝试使用indent-guide。它是这个功能的另一种实现,可能会更好用。 - user355252
@lunaryorn,这是一个有用的建议,但我真的很喜欢highlight-indent,除了这一个问题。 - travisbartley
这样的东西不行吗:"^\\(\\(\\ \\)\\{%s\\}\\ \\{%s\\}\\)+"?抱歉,我没有安装这个模式,只是在猜测。可能会有一个%s的问题,因为你需要指定两次。但是根据使用它的函数的具体情况,你也可以(也许)将其移动到最外层组之外。 - user797257
显示剩余5条评论
1个回答

1
假设您当前的字体锁定规则如下所示:

(,highlight-indentation-current-regex (1 'highlight-indentation-face))

你可以使用
(,highlight-indentation-current-regex (1 (if (save-excursion (skip-chars-backward " \t") (bolp)) 'highlight-indentation-face)))

我已经将 font-lock 规则添加到问题中。它与您的帖子不同,但我正在尝试理解如何将您所做的应用于我所拥有的内容。 - travisbartley
我调整了我的代码以适应您使用的规则。它保证是100%未经测试的,因此可能需要进行微小的调整才能使其正常工作。 - Stefan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接