Sublime Text 3 - 检测已安装的语法

SublimeText 3 - detect installed syntaxes

当 运行 插件代码时,如何检测可用语法?

例如当我调用

output_view.set_syntax_file("Packages/ANSIescape/ANSI.tmLanguage")

并且未安装 ANSIescape 包,然后我从 Sublime 收到一个无法用 try: ... except: 捕获的错误。

我想安全地执行set_syntax_file,没有任何错误,我想知道它是否成功。

您可以使用 sublime.find_resources() 来查找 Sublime 知道的所有提供语法的文件。这将是所有 tmLanguage 类型的文件(对于较旧的遗留语法)和 sublime-sytax 类型的文件,对于使用较新语法的包。

this plugin code 中有一个这样做的例子。相关代码片段是这样的:

def syntax_name(self, syntax):
    syntax_file = os.path.basename(os.path.split(syntax)[1])
    return os.path.splitext(syntax_file)[0]

def parse(self, langs, resource_spec):
    for syntax in sublime.find_resources(resource_spec):
        langs[self.syntax_name(syntax)] = syntax

def query_syntax(self):
    langs = {}

    self.parse(langs, "*.tmLanguage")
    self.parse(langs, "*.sublime-syntax")

这里的代码正在构建一个字典,其中的键是语言名称(从文件名派生而来,请参阅完整代码以获取更多信息)和值是文件的全名。