Sublimetext2 检查当前窗格中的选项卡数
我是Python和Sublime API的新手。我正在尝试为ST3编写一个简单的插件,它应该会关闭一个空窗格(当我按下Ctrl-E时)。以下是我尝试实施的步骤: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
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文档中,任何在[方括号]
中列出其返回值的内容都会告诉您返回值是一个事物列表(即数组)。因此,获取组中选项卡数量的问题在于,您调用的方法会告诉您所有视图都是什么,而不是有多少视图。在这里,pythonlen
函数可以为您获取列表的长度
最大的问题(在某一点上吸引了所有人)是视图
,窗口
和升华
模块都有一个运行命令
方法来运行命令,但它们可以执行的命令略有不同
View.run\u命令
可以运行作为TextCommand
(修改缓冲区的东西)实现的命令,而Window.run\u命令
可以运行TextCommand
或WindowCommand
。在这种情况下,您尝试使用的命令是WindowCommand
命令,因此,要使它们正常工作,您需要告诉窗口运行它们,而不是当前视图
当你在插件上工作时,它可以很方便地让Sublime控制台保持打开状态,这样你就可以看到发生了什么。当您保存时,它会立即告诉您代码中的语法问题(如=
vs=
问题),并且当您尝试调用不存在的东西时(如active\u view\u in_group
如果您不告诉它您正在窗口上运行它),它会给您一个错误
如果您试图运行一个它不知道如何处理的命令,那么run_command
不会生成错误;事实上,如果您尝试运行一个不存在的命令,它甚至不会生成错误
对于这类问题,您只需注意,如果没有其他错误,并且您确信它正在进入插件的该部分,那么您可能使用了错误的东西来运行该命令,或者该命令可能拼写错误。精彩描述!现在更容易理解它的一切!