Sublimetext2 我是否可以在sublime中创建自己的命令,以及如何将python实现与该命令关联?

Sublimetext2 我是否可以在sublime中创建自己的命令,以及如何将python实现与该命令关联?,sublimetext2,sublimetext,sublime-text-plugin,Sublimetext2,Sublimetext,Sublime Text Plugin,对我的前一个问题再深入一点。现在我来讨论升华命令的实现,这确实是一种令人困惑的方法来破解升华命令,因为在前一个线程中,为了找到用于打开浏览器的命令,我在@MattDMo的帮助下找到了它 然后我发现在Packages/Default文件夹中有一个名为open_in_browser.py的文件,我猜命令只是.py文件的文件名,但事实上我找不到相应的文件,该文件可以命名为find_pre.py,以命令find_prev,然后我将open_in_browser.py复制为open_browser.py,

对我的前一个问题再深入一点。现在我来讨论升华命令的实现,这确实是一种令人困惑的方法来破解升华命令,因为在前一个线程中,为了找到用于打开浏览器的命令,我在@MattDMo的帮助下找到了它

然后我发现在Packages/Default文件夹中有一个名为open_in_browser.py的文件,我猜命令只是.py文件的文件名,但事实上我找不到相应的文件,该文件可以命名为find_pre.py,以命令find_prev,然后我将open_in_browser.py复制为open_browser.py,并添加{“键”:[“ctrl+b”],“command”:“open_browsers”}来升华键映射,但它不起作用。然后我意识到应该有一些地方将升华命令注册到它们的实现中,所以如果有这样的机制,它是什么?我在哪里可以找到它

TL;DR

Packages/User
目录中创建一个具有任意名称的文件。使用
run
方法在文件中创建一个类,如
MyTestCommand
。在snake case中使用类名创建一个键映射,不带
Command
后缀。使用命名参数向命令传递任何内容

完整答案

创建自定义命令不需要注册任何内容。文件名并不重要,因为升华文本只需扫描其目录中的
.py
脚本并自动执行它们(注册它们)

以下是我使用的示例脚本:

import sublime
import sublime_plugin

class ChangeViewCommand(sublime_plugin.WindowCommand):
    def run(self, reverse=False):
        window = self.window
        group, view_index = window.get_view_index(window.active_view())
        if view_index >= 0:
            views = window.views_in_group(group)
            if reverse:
                if view_index == 0:
                    view_index = len(views)

            if reverse:
                new_index = view_index - 1
            else:
                new_index = (view_index + 1) % len(views)

            window.focus_view(views[new_index])
因此,它所做的是-切换到当前组中的下一个/上一个选项卡(默认行为围绕所有选项卡组循环)

因此,我们只需将其保存为
Packages/User
目录中的任意名称

然后,我们必须在用户密钥映射文件中创建密钥绑定:

{ "keys": ["ctrl+tab"], "command": "change_view" },
{ "keys": ["ctrl+shift+tab"], "command": "change_view", "args": {"reverse": true} },
如您所见,该命令是类名称的
snake\u case
,没有
command
后缀。这将使用命名参数运行类的
run
方法

这是否回答了您的问题?要在出现任何错误时进行调试,请打开ST控制台(默认快捷键为ctrl+`)

TL;DR

Packages/User
目录中创建一个具有任意名称的文件。使用
run
方法在文件中创建一个类,如
MyTestCommand
。在snake case中使用类名创建一个键映射,不带
Command
后缀。使用命名参数向命令传递任何内容

完整答案

创建自定义命令不需要注册任何内容。文件名并不重要,因为升华文本只需扫描其目录中的
.py
脚本并自动执行它们(注册它们)

以下是我使用的示例脚本:

import sublime
import sublime_plugin

class ChangeViewCommand(sublime_plugin.WindowCommand):
    def run(self, reverse=False):
        window = self.window
        group, view_index = window.get_view_index(window.active_view())
        if view_index >= 0:
            views = window.views_in_group(group)
            if reverse:
                if view_index == 0:
                    view_index = len(views)

            if reverse:
                new_index = view_index - 1
            else:
                new_index = (view_index + 1) % len(views)

            window.focus_view(views[new_index])
因此,它所做的是-切换到当前组中的下一个/上一个选项卡(默认行为围绕所有选项卡组循环)

因此,我们只需将其保存为
Packages/User
目录中的任意名称

然后,我们必须在用户密钥映射文件中创建密钥绑定:

{ "keys": ["ctrl+tab"], "command": "change_view" },
{ "keys": ["ctrl+shift+tab"], "command": "change_view", "args": {"reverse": true} },
如您所见,该命令是类名称的
snake\u case
,没有
command
后缀。这将使用命名参数运行类的
run
方法

这是否回答了您的问题?要在出现任何错误时进行调试,请打开ST控制台(默认快捷键为ctrl+`)