Sublime Text中Ruby正则表达式场景下语法高亮异常问题求助
Sublime Text中Ruby正则表达式场景下语法高亮异常问题求助
我在使用Sublime Text 3(版本3.2.2,Build 3211)自带的Ruby语法高亮时,遇到了正则表达式场景下的高亮异常问题,具体有两个明显的表现:
- 第一个问题:正则表达式里的字符串插值会被当成注释(
#)处理,从插值的位置开始,整行后续的语法高亮全部混乱 - 第二个问题:在定义
string_literal的那一行里,同时出现双引号和单引号的组合时,会从这一行开始一直到文件末尾的语法高亮全部失效,这个问题影响范围更大,情况更严重
附上问题的截图:
下面是出现问题的示例代码:
class Tokenizer def initialize(expression) @expression = expression end TOKEN_REGEX = / (?<whitespace>\s+) | (?<parenthesis>[\(\)]) | (?<comparison_operator>#{ComparisonNode::OPERATORS.map { |op| Regexp.escape(op) }.join('|')}) | (?<logical_operator>\b(?:#{LogicalNode::OPERATORS.join('|')})\b) | (?<boolean_literal>\b(?:#{ValueNode::BOOLEAN_LITERALS.join('|')})\b) | (?<number_literal>\d+) | (?<string_literal>"[^"]*"|'[^']*') | (?<identifier>[a-z_][a-z0-9_\.]*) | (?<unknown>.) /ix.freeze def tokenize tokens = [] @expression.scan(TOKEN_REGEX) do match_data = Regexp.last_match if match_data[:whitespace] next elsif match_data[:parenthesis] tokens << Token.new(:parenthesis, match_data[0]) elsif match_data[:comparison_operator] tokens << Token.new(ComparisonNode::TYPE, match_data[0]) elsif match_data[:logical_operator] tokens << Token.new(LogicalNode::TYPE, match_data[0].upcase) elsif match_data[:boolean_literal] tokens << Token.new(:literal, match_data[0].downcase) elsif match_data[:number_literal] tokens << Token.new(:literal, match_data[0]) elsif match_data[:string_literal] value = match_data[0][1...-1] # Remove surrounding quotes tokens << Token.new(:literal, value) elsif match_data[:identifier] tokens << Token.new(FieldNode::TYPE, match_data[0]) else raise "Unexpected character: #{match_data[0]}" end end tokens end end
我一开始以为是自带语法高亮的问题,还尝试安装了专门修复Ruby语法高亮的相关插件,但问题依然存在。
有没有小伙伴遇到过同样的问题?如果有的话,麻烦分享一下解决方法,谢谢啦!
备注:内容来源于stack exchange,提问作者Victor Cordeiro Costa




