【问题标题】:Regex for every group of spaces at the beginning of a line行首每组空格的正则表达式
【发布时间】: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,这是一个有用的建议,但我真的很喜欢高亮缩进,除了这个问题。

标签: regex emacs elisp


【解决方案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)))

【讨论】:

  • 我在问题中添加了字体锁定规则。它与您的帖子不同,但我正在尝试了解如何将您的作品应用到我所拥有的作品中。
  • 我调整了我的代码以适应您使用的规则。它保证 100% 未经测试,因此当然可能需要稍作调整才能使其正常工作。
猜你喜欢
  • 2015-08-20
  • 1970-01-01
  • 2018-03-15
  • 2021-02-01
  • 1970-01-01
  • 2012-02-02
  • 1970-01-01
  • 2011-05-13
  • 2014-07-25
相关资源
最近更新 更多