【发布时间】:2013-07-08 07:32:16
【问题描述】:
我正在尝试为 emacs 的 highlight indentation 模块修复正则表达式。它目前的工作方式是每隔 %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))))
【问题讨论】:
-
我非常熟悉正则表达式,但我不熟悉如何完成字体锁定。如果你愿意解释,我可能会提供帮助。是否只是编写一个匹配的正则表达式,然后指定其中应突出显示的组?
-
如果是这种情况,那么您的第二个正则表达式似乎有太多空格。
"^\(\( \) \{%s\}\)\{1,}"可以工作吗? -
您可能想改用indent-guide。这是此功能的替代实现,可能效果更好。
-
@BruceConnor,恐怕我对字体锁定也没有太多了解或了解。这是别人的模块,我是 elisp 和正则表达式的初学者。我尝试了您的建议,但没有任何匹配项。
-
@lunaryorn,这是一个有用的建议,但我真的很喜欢高亮缩进,除了这个问题。