0

似乎以下两行代码破坏了 TCL 中的语法着色。

regsub -all {/} $original {\\\\} target      # The last } is being escaped

set grep_keyword [string trim $grep_keyword {"}]   # The " character is starting a new quote

当我打开文件时,这段代码是这样的。有没有办法解决这个问题?

4

2 回答 2

1

虽然从技术上讲问题出在 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...
于 2012-06-15T08:29:23.933 回答
1

所以,我回到了这个问题,并努力解决我的问题。我更改了 TCL 的 tmLangauge 文件。} 字符被识别为结束大括号。我刚刚也将 \} 添加到了这个定义中。

<key>braces</key>
<dict>
    <key>begin</key>
    <string>(?:^|(?&lt;=\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>
于 2012-09-04T16:08:17.003 回答