如何在构建系统中使用自定义扩展名(例如*.ltx*.cmake等)定义一个选择器,而该选择器没有可用的选择器(例如text.tex.latexsource.c++等)?

是否可以?如果是,怎么办?

最佳答案

如果定义了新的语法定义(即新的.tmLanguage文件),则是可能的。语法定义可以声明新的“作用域名称”,然后可以在新的自定义构建系统中使用。

新的语法定义文件实际上不必定义/匹配文件的语法,因为您可以简单地通过文件扩展名进行匹配...!

查看.tmLanguage文件语法的here。 “scopeName”项可让您命名新的范围(即“text.tex.latex”等)。我将在下面举一个例子。

我创建了一个新语法,它定义了一个新的范围-相当容易(就像Sublime中的大多数事情一样):

  • 在命令面板中,选择“软件包控制:安装软件包”
  • 在软件包列表中,选择“PackageDev”
  • 通过选择工具>软件包>软件包开发>新语法定义来创建新的语法定义
  • 您的新语法定义将如下所示:

  • {“name”:“语法名称”,
    “scopeName”:“source.syntax_name”,
    “文件类型”: [””],
    “模式”:[
    ],
    “uuid”:“...”
    }

    ...用描述性名称替换“语法名称”,用新的作用域名称替换“source.syntax_name”,然后填写“fileTypes”以包含一个或多个文件扩展名。例如:
    "fileTypes": ["tex", "ltx"]
  • 使用Packages/User
  • 下的“.JSON-tmLanguage”扩展名保存文件
  • 选择工具>构建系统>选择Json来翻译
  • 选择工具>构建

  • 你完成了!任何碰巧具有在“fileTypes”中定义的扩展名之一的新文件都将激活“scopeName”作用域。

    现在,您可以在新的构建系统文件中使用此范围(工具>构建系统>新构建系统... )

    干杯!

    10-08 16:34