Python 获取升华文本3插件中的文件语法选择

Python 获取升华文本3插件中的文件语法选择,python,sublimetext3,sublimetext,sublime-text-plugin,Python,Sublimetext3,Sublimetext,Sublime Text Plugin,我有一个非常小的插件,可以从use语句开始打开perl文件模块。它实际上是基本的,它只是将“::”替换为“/”,然后如果文件存在于PERL5LIB中指定的路径中,它就会打开它。 我希望它仅在选择open file语法为perl时运行。 有没有API来获取这些信息? 这是我现在拥有的代码: class OpenPerlModule(sublime_plugin.TextCommand): def run(self, edit=None, url=None): perl_fi

我有一个非常小的插件,可以从use语句开始打开perl文件模块。它实际上是基本的,它只是将“::”替换为“/”,然后如果文件存在于PERL5LIB中指定的路径中,它就会打开它。 我希望它仅在选择open file语法为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

(操作系统是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?")

如果语法为“Perl”:
将是一个更容易的测试,并将涵盖用户安装了第三方Perl语法的情况。谢谢,我将此标记为答案:-)我已经查找了一些参考指南,但大多数都缺乏一种或另一种方法,也许你也有一个关于在哪里找到这类信息的建议?这也是一个有效的解决方案,但要小心,你可能有嵌套的语法。这一切都取决于您的用例。例如,您可能在markdown文档中嵌套了perl代码(MarkdownEditing插件和我的旧击倒插件都添加了source.perl范围以突出显示嵌套的代码)。