【问题标题】:How to use regex capture group inside a .nanorc file?如何在 .nanorc 文件中使用正则表达式捕获组?
【发布时间】:2018-08-03 10:16:01
【问题描述】:

如何结合使用 .nanorc 文件中的正则表达式捕获组和 color 选项?

Nanorc docs 描述了一个颜色选项,用于创建语法高亮。

颜色 fgcolor,bgcolor 正则表达式

对于当前定义的语法,显示与扩展正则表达式regex匹配的所有表达式,前景色为fgcolor,背景色为bgcolor,必须至少指定其中之一……

如果可以使用捕获组,使用以下正则表达式将允许我修复 nano.bashrc 语法突出显示文件中的一个烦人的错误,该错误会错误地突出显示 cmets,如下所示:

新的(工作的)正则表达式是这样的:

{[^}]*}|\[[^\]]*\]|(#.*$)

它匹配(包括)大括号之间的所有内容,或者匹配(包括)方括号之间的所有内容,最后是# 符号后跟任意字符的任意次数,直到行尾。仍在研究如何不匹配 # 如果它前面有一个美元符号。

你可以在这里看到它的工作演示:https://regexr.com/3tdqf

我希望能够只突出实际的 cmets,方法是使用第一个捕获组作为颜色突出显示的过滤器!

有可能吗?

编辑:我注意到可以为颜色突出显示提供开始模式和结束模式,根据文档:

color fgcolor,bgcolor start="sr" end="er"

显示以扩展正则表达式 sr 开始并以扩展正则表达式 er 结束的表达式,前景色为 fgcolor 和背景色为 bgcolor,必须至少指定其中之一。这允许语法突出显示跨越多行。请注意,在找到初始 sr 之后的所有后续 sr 实例都将突出显示,直到第一个 er 实例。

也许这可以帮助解决我们的困境:S

【问题讨论】:

  • 试试{[^}]*}|\[.*\]|(?<!\$)(#.*$)here
  • 这很可爱,但在 bash 中不提供向前/向后的负面展望 - 只是 ERE(不是 PCRE)。但我感谢您的意见!我认为我需要弄清楚的是如何以某种方式采用上述正则表达式并使其仅与 # 符号以及它之后的所有标记匹配,直到行结束,如果它不是代码块的一部分,变量,等等——所以以某种方式“仅当 # 不在大括号、方括号内或前面有美元符号时才匹配 # 和后续字符直到句子结尾”
  • 更新了正则表达式here,它还捕获了弯括号内的#()
  • 试试{[^}]*}|\[.*\]|\([^\)]*\)|(?:\s|^)(#.*$) here
  • 有点尴尬....我一直试图修复的错误不是错误。从屏幕截图 - 这是格式错误的 bash(测试条件应该看起来像 [ ! -z someThing ] && [ otherCondition ] - 修复提供了正确的代码突出显示。不过,知道这是否可能无论如何都会很酷

标签: regex bash syntax-highlighting nano


【解决方案1】:

我遇到这个问题是因为我正在寻找如何使用 Nano 来突出显示 C 中的函数。如上面 cmets 所述,Nano 使用 POSIX 扩展正则表达式 (ERE),而 ERE 没有前瞻或后瞻。解决方法依赖于 nanorc 颜色语法规则从上到下按顺序应用的事实。我们创建规则来捕获整个群体,然后再往下走;我们创建规则来改变我们不想要的字符的颜色。

## Comment
color green "#[#a-zA-Z0-9[:blank:]]*"
## Quoted text
color yellow "\"[^\"]*\""
## Allow commenting out a line of code
color green "^[[:blank:]]*#.*$"
## Braces
color blue "\{.*\}"
## Brackets
color blue "\[.*\]"

上面的代码与@GrayedFox here 和@UnbearableLightness here 给出的示例相匹配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-24
    • 2011-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多