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

Check number of tabs in current pane

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

  1. 检查是否有拆分窗格(视图 > 布局)
  2. 如果没有拆分窗格(视图 > 布局 > 单个)- 什么都不做 (return)。
  3. 如果有拆分的窗格并且当前窗格中有 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 的工作方式有关的问题。

下面是您的代码的调整版本,可以让您顺利进行。

import sublime_plugin

# Note 1: Add "Command" to name
class CloseEmptyPaneCommand(sublime_plugin.WindowCommand):
    def run(self):
        window = self.window
        # Note 2: '=' is assignment; use '==' for equality
        if window.num_groups() == 1:
            return

        active_pane = window.active_group()
        # Note 3: views_in_group returns a list of views
        tabs_in_pane = len(window.views_in_group(active_pane))
        # Note 4: This method is in window
        current_tab = window.active_view_in_group(active_pane)

        # Note 5: These commands are window commands
        if tabs_in_pane > 0:
            window.run_command("close_file")
        else:
            window.run_command("close_pane")

虽然在技术上不需要,但使用 Command 实现命令的后缀 类 是个好习惯; Sublime 在创建内部命令名称时丢弃了该部分,但它使您的代码更容易被其他插件作者(和您自己)阅读,因为更复杂的插件可能包含其他非命令 类。

在 API 文档中,任何在 [square brackets] 中列出其 return 的内容都告诉您 return 值是一个列表(即数组) .因此,获取组中选项卡数量的问题在于,您调用的方法告诉您所有视图 是什么 ,而不是 多少 其中有。这里pythonlen函数可以帮你得到列表的长度

最大的陷阱(在某个时候抓住了所有人)是 ViewWindowsublime 模块都有一个 run_command 方法来 运行一个命令,但是他们能执行的命令略有不同。

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

当您使用插件保持 Sublime 控制台打开以便您可以看到正在发生的事情时,它会很方便。这将在您保存时立即告诉您代码中的语法问题(例如 === 问题),并在您尝试调用不存在的内容时给您一个错误(比如 active_view_in_group 如果你不告诉它你正在 运行 在 window 上安装它)。

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

对于这类问题,您只需要注意,如果没有其他错误,并且您确定它到达了插件的那部分,那么您可能使用了错误的东西 运行命令,否则可能拼写错误。