似乎以下两行代码破坏了 TCL 中的语法着色。
regsub -all {/} $original {\\\\} target # The last } is being escaped
set grep_keyword [string trim $grep_keyword {"}] # The " character is starting a new quote
当我打开文件时,这段代码是这样的。有没有办法解决这个问题?
似乎以下两行代码破坏了 TCL 中的语法着色。
regsub -all {/} $original {\\\\} target # The last } is being escaped
set grep_keyword [string trim $grep_keyword {"}] # The " character is starting a new quote
当我打开文件时,这段代码是这样的。有没有办法解决这个问题?
虽然从技术上讲问题出在 Sublime Text 2 上(在某些极端情况下正确突出显示 Tcl 并不是很简单,您已经发现),但将 Tcl 代码更改为语义等价的东西更容易。
regsub -all {/} $original "\\\\\\\\" target
set grep_keyword [string trim $grep_keyword "\""]
当然,您可以考虑使用string map
第一个:
set target [string map {"/" "\\\\"} $original]
# or this:
# set target [string map {/ {\\}} $original]
# but I'm not sure if the editor will like that...
所以,我回到了这个问题,并努力解决我的问题。我更改了 TCL 的 tmLangauge 文件。} 字符被识别为结束大括号。我刚刚也将 \} 添加到了这个定义中。
<key>braces</key>
<dict>
<key>begin</key>
<string>(?:^|(?<=\s))\{</string>
<key>comment</key>
<string>matches a single brace-enclosed word</string>
<key>end</key>
<string>\}([^\s\]]*)</string>
<key>endCaptures</key>
<dict>
<key>1</key>
<dict>
<key>name</key>
<string>invalid.illegal.tcl</string>
</dict>
</dict>
<key>patterns</key>
<array>
<dict>
<key>match</key>
<string>\\[{}\n]</string>
<key>name</key>
<string>constant.character.escape.tcl</string>
</dict>
<dict>
<key>include</key>
<string>#inner-braces</string>
</dict>
</array>
</dict>
在上面,我对 RegEx 进行了修改,如下所示:
<string>\}([^\s\]]*)|\\}\s</string>