我有一个在 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/