语法高亮显示 nano 中字符串和注释的组合

语法高亮显示 nano 中字符串和注释的组合

我想知道是否有人可以告诉我是否可以配置语法突出显示,以便.nanorc在下面的文本中......

Dim s$ = "foo ' bar" ' bar "foo"

...字符串"foo 'bar"全部突出显示一种颜色,尾随注释' bar "foo"突出显示另一种颜色。

如果我这样做:

# Comments.
color yellow "'.*"

# Strings
color brightmagenta ""(\\.|[^"])*""

然后我得到这个:

图片1

如果我按照其他顺序执行:

# Strings
color brightmagenta ""(\\.|[^"])*""

# Comments.
color yellow "'.*"

然后我得到这个:

图片2

答案1

如果评论有不是包含 a ',也就是说最后的 '该行是任何评论的开头,那么似乎最好工作向后从行尾开始,进行非贪婪搜索。

试试这个,它使用您的字符串术语,但使用不同的注释术语:

# Strings
color brightmagenta ""(\\.|[^"])*""

# Comments.
color green "[^']*$"

这有效,除了不幸的是,注释标记 ( ') 没有着色:

几乎想要的结果的屏幕截图

添加一个附加的',如下所示:

# Strings
color brightmagenta ""(\\.|[^"])*""

# Comments.
color green "'[^']*$"

最终给出了想要的结果:

所需结果的屏幕截图

注意:非贪婪的替代方案[^']*'.*?,这就是我第一的尝试使用,见下文,但失败了......


惰性(非贪婪)*?会导致错误

.*?我的第一个想法是使用还为注释标记 ( ') 着色,如下所示:

# Comments.

color green "'.*?$"

从逻辑上讲,这种从最后开始的非贪婪搜索也应该适用于您的评论。

但是,nano 会抛出错误:

Bad regex "'.*?$": repetition-operator operand invalid

可能是一个错误,请参阅在Mac OS X 上使用brew #41 中的nano 2.3.6 时,php.nanorc、sh.nanorc 和zsh.nanorc 中的正则表达式错误据称已修复:

答:POSIX 正则表达式不支持?因为懒惰(或者根本就是懒惰)。从有问题的行中删除 ? 可以消除错误,但您可能不想在这里这样做,因为这会改变其他人的评估。

注意:我在 OS X 上运行 nano 时遇到此错误 - 我不确定这是否相关。

相关内容