在Textmate 2语言语法中匹配行但注意单词边界

时间:2018-07-19 16:17:37

标签: syntax-highlighting textmate textmate2

我在TextMate中使用了自定义语法highligher。它在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
  }
}

我是否可以修改匹配器,以使编辑器尊重这些匹配模式中的单词边界?

2 个答案:

答案 0 :(得分:2)

正如您在博客文章中所指出的那样,出于选择目的,我们现在将某些语法匹配的区域视为“单词”。您突出显示的区域都是常数,因此将其视为一个很长的单词。

您需要为每个部分赋予不同的范围以更正此问题,它们既可以是恒定的,也必须是唯一的。另一种选择是给它们不同的范围,也许将todo部分作为字符串匹配?

如果给它们一个常量和字符串范围,则工作将完成。如果给它们提供不同的常量范围,则需要为每个给它们提供不同的cd C:\Program Files (x86)\Tesseract-OCR C:\Program Files (x86)\Tesseract-OCR> tesseract --version 值创建一个首选项。 (该值并不重要,只需要唯一即可。)

您还可以为整行提供characterClass包装器作用域,这是我们通常对这样的代码区域执行的操作,如果您希望将行的作用域限制为执行操作等的单数形式。

例如:

meta

答案 1 :(得分:0)

。*是贪婪的,因此正则表达式会尽可能匹配行尾。*?。就我所能看到的是您正在寻找的东西;如果您希望上面的模式与' o oopps '行中的' o '相匹配。