Sublimetext2 检查当前窗格中的选项卡数

Sublimetext2 检查当前窗格中的选项卡数,sublimetext2,sublimetext3,sublimetext,sublime-text-plugin,Sublimetext2,Sublimetext3,Sublimetext,Sublime Text Plugin,我是Python和Sublime API的新手。我正在尝试为ST3编写一个简单的插件,它应该会关闭一个空窗格(当我按下Ctrl-E时)。以下是我尝试实施的步骤: 检查是否存在拆分窗格(视图>布局) 如果没有拆分的窗格(视图>布局>单个)-不执行任何操作(返回) 如果有拆分窗格且当前窗格中有1个或多个选项卡,则关闭此活动选项卡。如果活动窗格中没有选项卡,请关闭此窗格本身 这就是我要写的代码。是的,显然有很多错误 import sublime_plugin class CloseEmptyPane

我是Python和Sublime API的新手。我正在尝试为ST3编写一个简单的插件,它应该会关闭一个空窗格(当我按下Ctrl-E时)。以下是我尝试实施的步骤:

  • 检查是否存在拆分窗格(视图>布局)
  • 如果没有拆分的窗格(视图>布局>单个)-不执行任何操作(返回)
  • 如果有拆分窗格且当前窗格中有1个或多个选项卡,则关闭此活动选项卡。如果活动窗格中没有选项卡,请关闭此窗格本身
  • 这就是我要写的代码。是的,显然有很多错误

    import sublime_plugin
    
    class CloseEmptyPane(sublime_plugin.WindowCommand):
        def run(self):
            window = self.window
            if window.num_groups() = 1:
                return
            active_pane = window.active_group()
            tabs_in_pane = window.views_in_group(active_pane)
            current_tab = active_view_in_group(active_pane)
            if tabs_in_pane > 0:
                current_tab.run_command("close_file")
            else:
                active_pane.run_command("close_pane")
    

    我可能错了,但当我试图检查当前窗格中打开的选项卡的数量时,似乎出现了主要问题。如何修复它?

    您的第一次尝试对于您正在尝试做的事情来说是一个很好的开始,您只是遇到了一些小的语法问题和一些与API如何工作有关的问题

    下面是您的代码的调整版本,以使您顺利运行

    导入升华插件
    #注1:在名称中添加“命令”
    类CloseEmptyPaneCommand(升华插件.WindowCommand):
    def运行(自):
    window=self.window
    #注2:“=”为赋值;使用“==”表示相等
    如果window.num_groups()=1:
    返回
    活动窗格=窗口。活动组()
    #注3:views\u in\u组返回一个视图列表
    选项卡\u在\u窗格中=len(窗口。视图\u在\u组中(活动\u窗格))
    #注4:此方法在窗口中
    当前\选项卡=窗口。活动\视图\在\组中(活动\窗格)
    #注5:这些命令是窗口命令
    如果窗格中的选项卡>0:
    运行命令(“关闭文件”)
    其他:
    window.run_命令(“关闭_窗格”)
    
    虽然在技术上不需要,但最好在实现命令的类后面加上
    Command
    ;Sublime在创建内部命令名时丢弃了这一部分,但它使其他插件作者(和您自己)更容易阅读您的代码,因为更复杂的插件中可能有其他非命令类

    在API文档中,任何在
    [方括号]
    中列出其返回值的内容都会告诉您返回值是一个事物列表(即数组)。因此,获取组中选项卡数量的问题在于,您调用的方法会告诉您所有视图都是什么,而不是有多少视图。在这里,python
    len
    函数可以为您获取列表的长度

    最大的问题(在某一点上吸引了所有人)是
    视图
    窗口
    升华
    模块都有一个
    运行命令
    方法来运行命令,但它们可以执行的命令略有不同

    View.run\u命令
    可以运行作为
    TextCommand
    (修改缓冲区的东西)实现的命令,而
    Window.run\u命令
    可以运行
    TextCommand
    WindowCommand
    。在这种情况下,您尝试使用的命令是
    WindowCommand
    命令,因此,要使它们正常工作,您需要告诉窗口运行它们,而不是当前视图

    当你在插件上工作时,它可以很方便地让Sublime控制台保持打开状态,这样你就可以看到发生了什么。当您保存时,它会立即告诉您代码中的语法问题(如
    =
    vs
    =
    问题),并且当您尝试调用不存在的东西时(如
    active\u view\u in_group
    如果您不告诉它您正在
    窗口上运行它),它会给您一个错误

    如果您试图运行一个它不知道如何处理的命令,那么
    run_command
    不会生成错误;事实上,如果您尝试运行一个不存在的命令,它甚至不会生成错误


    对于这类问题,您只需注意,如果没有其他错误,并且您确信它正在进入插件的该部分,那么您可能使用了错误的东西来运行该命令,或者该命令可能拼写错误。

    精彩描述!现在更容易理解它的一切!