我想知道是否有人可以告诉我是否可以配置语法突出显示,以便.nanorc
在下面的文本中......
Dim s$ = "foo ' bar" ' bar "foo"
...字符串"foo 'bar"
全部突出显示一种颜色,尾随注释' bar "foo"
突出显示另一种颜色。
如果我这样做:
# Comments.
color yellow "'.*"
# Strings
color brightmagenta ""(\\.|[^"])*""
然后我得到这个:
如果我按照其他顺序执行:
# Strings
color brightmagenta ""(\\.|[^"])*""
# Comments.
color yellow "'.*"
然后我得到这个:
答案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 时遇到此错误 - 我不确定这是否相关。