syntax-highlighting - Textmate 2 语言语法中匹配行但尊重单词边界

标签 syntax-highlighting textmate textmate2

我有一个在 TextMate 中使用的自定义语法高亮器。它在 Textmate 1 中效果很好,但在 Textmate 2 中,它将整行视为单个单词。

这会影响:

  • 双击选择单词(选择整行)
  • alt+箭头将光标移动到单词上(跳过整行)

Textmate 1 过去在一般偏好设置中有一个“单词边界”选项,我认为这就是它起作用的原因。

我了解 Textmate 2 refactored字边界处理,但我不明白如何使我的语法包在新范例中工作。

我的语言语法非常简单,它有这样的条目:

{  patterns = (
  {
    name = 'constant.language.toStart.todo';
    match = '^\s*o\s.*';
      // ^     Starting at the beginning of the line,
      // \s*   Preceded by any number of spaces
      // o\s   Match any "o "
      // .*    Then match all chars after it
  }
}

有没有办法修改匹配器,以便编辑器尊重这些匹配模式内的单词边界?

最佳答案

正如您所指出的博客文章,我们现在将某些语法匹配区域视为“单词”以进行选择。您突出显示的区域都是一个常量,因此它被视为一个非常长的单词。

您需要给每个部分不同的范围来纠正这个问题,它们甚至可以都是恒定的,但必须是唯一的。另一种选择是给它们不同的范围,也许将待办事项部分作为字符串进行匹配?

如果你给他们一个常量和字符串范围,工作就会完成。如果您给它们不同的常量范围,您将需要为每个给它们不同的 characterClass 值创建一个首选项。 (值并不重要,只需唯一即可。)

您还可以为整行指定一个 meta 包装器作用域,如果您希望将行的作用域保持为单一的以执行操作等,那么我们通常会对这样的代码区域执行此操作。

例如:

{  patterns = (
    {   name = 'meta.preprocessor';
        match = '^\s*\o\s.*';
    },
    {   name = 'entity.name.class';
        match = '^\s*\.\s.*';
    },
    {   name = 'meta.class.ruby';
        match = '^\s*x\s.*';
    },
}

关于syntax-highlighting - Textmate 2 语言语法中匹配行但尊重单词边界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51427512/

相关文章:

c++ - TinyXML #include 问题...使用库

javascript - 在保存时编译 CoffeeScript?

macos - Textmate2 中背景的不透明度

fonts - 如何在 TextMate 2 主题中设置字体样式?

WPF:将格式应用于 RichTextBox 的快速方法

Vim 打开语法高亮

css - 我在 jekyll 和 github 页面中错过了什么来使语法高亮工作?

Erlang 的 Emacs/TextMate 代码完成?

Python replace() 带颜色的字符串?

visual-studio-code - 如何向 VSCode 添加基本语法?