获取sublime text 3插件中的文件语法选择

Get file syntax selection in sublime text 3 plugin

我有一个非常小的插件,可以从 use 语句开始打开一个 perl 文件模块。它非常基本,只是用“/”替换“::”,然后如果文件存在于 PERL5LIB 中指定的路径之一,它会打开它。 只有当打开文件语法被选择为 perl 时,我才希望它为 运行。 是否有任何 API 来获取该信息? 这是我现在的代码:

class OpenPerlModule(sublime_plugin.TextCommand):
    def run(self, edit=None, url=None):
        perl_file = url.replace("::", "/")
        perl_dirs = os.environ.get('PERL5LIB')
        for perl_dir in perl_dirs.split(':'):
            if (os.path.exists(perl_dir + '/' + perl_file + '.pm')):
                self.view.window().open_file(perl_dir + '/' + perl_file + '.pm')
                return

(OS 是 Ubuntu)

这是您要查找的代码片段

self.view.settings().get("syntax")

你应该检查它是否与Perl相关的语法。我建议这样:

syntax = self.view.settings().get("syntax")
syntax.endswith("Perl.tmLanguage") or syntax.endswith("Perl.sublime-syntax")

第二个 or 子句涵盖 >=3080

中引入的新语法

除了 Allen Bargi 的回答中描述的 self.view.settings().get("syntax") 之外,您还可以获取当前光标位置的范围并检查其中的 source.perl

import sublime_plugin

class FindScopeCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        # `sel()` returns a list of Regions that are selected. 
        # Grab the beginning point of the first Region in the list.
        first_point = self.view.sel()[0].a
        # now, get the full scope name for that point
        scope = self.view.scope_name(first_point)
        if "source.perl" in scope:
            print("You're using Perl. Yay!")
        else:
            print("Why don't you love Perl?")