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

wor*_*llo 2 sublimetext sublimetext2 sublime-text-plugin

更深入地了解我之前的问题为什么 Sublime Text 的这个热键配置不起作用?. 现在我来谈谈 sublime 命令的实现,它确实是一种破解 sublime 命令的令人困惑的方法,因为在前一个线程中探索找到用于打开浏览器的命令,最后我在帮助下找到了它@MattDMo。

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

Ser*_*sky 5

TL; 博士

Packages/User目录中创建一个任意名称的文件。在文件中创建一个类,就像MyTestCommand使用run方法一样。使用蛇形大小写的类名创建一个键盘映射,没有Command后缀。使用命名参数将任何内容传递给命令。

完整答案

无需注册任何内容即可创建自定义命令。文件名并不重要,因为 Sublime Text 只是扫描它的目录中的.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])
Run Code Online (Sandbox Code Playgroud)

那么它的作用 - 切换到当前组中的下一个/上一个选项卡(默认行为围绕所有选项卡组)。

所以我们只需将它保存为Packages/User目录中的任何名称。

然后我们必须在我们的用户键盘映射文件中创建键绑定:

{ "keys": ["ctrl+tab"], "command": "change_view" },
{ "keys": ["ctrl+shift+tab"], "command": "change_view", "args": {"reverse": true} },
Run Code Online (Sandbox Code Playgroud)

如您所见,该命令是snake_case没有Command后缀的类名。这将run使用命名参数运行类的方法。

这回答了你的问题了吗?为了在出现任何错误时进行调试 - 打开 ST 控制台(默认快捷方式是ctrl+ `