我是Python和Sublime API的新手。我试图为ST3编写一个简单的插件,它应该关闭一个空窗格(当我按下Ctrl-E时)。以下是我尝试实施的步骤:
还有我试图写的代码。是的,显然有很多错误。
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")
我可能错了,但是当我试图检查当前窗格中打开的标签数量时,似乎出现了主要问题。如何解决?
答案 0 :(得分:2)
你的第一次尝试是你正在尝试做的一个非常好的开始,你只是有一些小的语法问题和一些与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]
中返回的任何内容都告诉您返回值是事物列表(即数组)。因此,获取组中标签数量的问题在于,您调用的方法会告诉您所有视图 ,而不是 那些是。这里python len
函数可以为你获取列表的长度。
最重要的是({1}},View
和Window
模块都有sublime
方法来运行命令,但他们可以执行的命令略有不同。
run_command
可以运行以View.run_command
(修改缓冲区的内容)实现的命令,而TextCommand
可以运行Window.run_command
或TextCommand
。在这种情况下,您尝试使用的命令是WindowCommand
命令,因此要使它们工作,您需要告诉窗口运行它们,而不是当前视图。
当您使用插件来保持Sublime控制台处于打开状态时,它可以很方便,以便您可以看到正在发生的事情。当您保存时,会立即告诉您代码中的语法问题(例如WindowCommand
vs =
问题),当您尝试调用不存在的内容时会出现错误(例如==
,如果你没有告诉它你在active_view_in_group
上运行它。
如果你试图运行一个它不知道如何处理的命令,那么window
不会产生错误;实际上,如果您尝试运行不存在的命令,它甚至不会生成错误。
对于那种问题,您只需要注意,如果没有其他错误并且您确定它已经到达插件的那一部分,那么您可能使用了错误的操作来运行命令,或者它可能拼写错误错。