【问题标题】:Can you highlight a character after a certain length in sublime text?您可以在崇高文本中突出显示一定长度后的字符吗?
【发布时间】:2016-06-16 09:28:45
【问题描述】:

在 VIM 中,只有当行超过一定长度时才能突出显示一个字符,例如:

这可以在 Sublime Text 2 或 3 中完成吗?我知道有一个显示标尺的设置,但我发现它们有时会让人分心。

【问题讨论】:

    标签: sublimetext2 sublimetext3 sublimetext sublime-text-plugin


    【解决方案1】:

    javiervd

    这可以在 Sublime Text 2 或 3 中完成吗?



     

    保存以下脚本@:
    /Packages/Highlight Long Lines/highlight_long_lines.py

     

    import sublime, sublime_plugin
    
    class highlight_long_lines( sublime_plugin.EventListener ):
        def on_modified_async( self, view ):
    
    
            #▒▒▒▒▒▒▒▒  Settings  ▒▒▒▒▒▒▒▒#
            maxLength           = 80
            scope               = "Invalid"
            firstCharacter_Only = False
    
    
    
            view.erase_regions( "LongLines" )
    
            indentationSize     = view.settings().get( "tab_size" )
            indentation_IsSpace = view.settings().get( "translate_tabs_to_spaces" )
    
            document    = sublime.Region( 0, view.size() )
            lineRegions = view.lines( document )
    
            invalidRegions = []
    
            for region in lineRegions:
    
                text             = view.substr( region )
                text_WithoutTabs = text.expandtabs( indentationSize )
    
                if text_WithoutTabs.isspace():
                    tabOffset = 0
                else:
                    tabCount      = text.count( "   " )
                    tabDifference = len( text_WithoutTabs ) - len( text )
                    tabOffset     = tabDifference
    
                lineLength = ( region.end() - region.begin() ) - tabOffset
                if lineLength > maxLength:
    
                    highlightStart = region.begin() + ( maxLength - tabOffset )
    
                    if firstCharacter_Only == True:
                        highlightEnd = highlightStart + 1
                    else:
                        highlightEnd = region.end()
    
                    invalidRegion = sublime.Region( highlightStart, highlightEnd )
                    invalidRegions.append( invalidRegion )
    
            if len( invalidRegions ) > 0:
                view.add_regions( "LongLines", invalidRegions, scope )
    

     


     

    变量设置:

    maxLength 会影响行之后突出显示的长度。

    scope 影响高亮区域的颜色。
    您可以使用活动 .tmTheme 文件中的任何范围(color scheme)。

    firstCharacter_Only 影响突出显示区域的范围。
    如果设置为True,则仅突出显示第 81 位的字符。
    如果设置为False,则第80位之后的所有字符都会高亮显示。

    【讨论】:

    • 这太好了,有没有办法让它只突出显示该列中的字符?
    • @javiervd :查看更新的答案。我刚刚添加了一个firstCharacter_Only 设置,以及一些制表符验证,以确保它适用于空格和制表符缩进。如果在行文本开始后使用一堆制表符,区域计算可能会被抛出,但在大多数情况下应该可以正常工作。
    【解决方案2】:

    你可以只搜索这个正则表达式:

    (?<=.{80}).+
    

    它将是可导航和按需的。

    【讨论】:

      【解决方案3】:

      您可以扩展(复制-重命名并使用)语法高亮并添加针对此特定情况的规则!

      你可以添加一个类似这样的正则表达式:

          <key>charAt</key>
          <dict>
              <key>patterns</key>
              <array>
                  <dict>
                      <key>match</key>
                      <string>(?<=^.{21})(.)</string>
                      <key>name</key>
                      <string>invalid.illegal.bad-comments-or-CDATA.html</string>
                  </dict>
              </array>
          </dict>
      

      其中 21 是要突出显示的位置

      【讨论】:

      • 由于许多原因,这是非常不可靠和不好的选择。最具体地说,它可以防止出现任何其他突出显示。
      猜你喜欢
      • 1970-01-01
      • 2014-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多