如何设置或查找 Sublime Text 插件的命令名称

How to set or find the command name of a Sublime Text plugin

我正在尝试为我的节点 js 服务器编写一个 ST3 插件。为了 运行 它我调用命令 view.run_command('Node js.nodejs').

我的 Sublime Text Packages 文件夹如下所示:

│   main.py
│   text_example_one.py
│
├───Node js
│       Nodejs.py
│
└───User
    │   main.py
    │   Package Control.last-run
    │   Package Control.sublime-settings
    │   Preferences.sublime-settings
    │
    └───Package Control.cache
            01524fae79697630d0454ba3fabd9414
            01524fae79697630d0454ba3fabd9414.info

../Packages/Node js/Nodejs.py 文件包含以下代码:

import sublime, sublime_plugin

class TryCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        print("It's working")
        self.view.insert(edit, 0, "Hello, World!")

调用 view.run_command('Node js.nodejs') 时什么也没有发生,参见 the image of the window here。

没有出现错误,但未插入 "Hello, World!" 消息,并且 "It's working" 未在控制台中打印。

view.run_command('Node js.nodejs') 命令未调用您的插件。

为了 运行 你的插件你需要调用 try 命令,例如view.run_command("try")。以下是原因的解释:

Sublime Text 插件的命令名称源自它们的 class 名称。例如下面的 class...

class PrintHelloInConsoleCommand(sublime_plugin.TextCommand):
    def run(self, edit):
        print("Hello")

...可以通过调用print_hello_in_console命令来运行。例如

// Run from a plugin or in the console
view.run_command("print_hello_in_console")

// Run from keys by adding a key binding
{"keys": ["ctrl+shift+y"], "command": "print_hello_in_console"},

// If instead of a TextCommand the plugin had been a sublime_plugin.WindowCommand
// then the following line would be needed to run the command in the console.
window.run_command("print_hello_in_console")

要从 class 名称 中获取 命令名称,首先从 class 姓名。其次,将 class 名称的剩余部分从 CamelCase 转换为 snake_case。因此定义 class PrintHelloInConsoleCommand 的插件由 print_hello_in_console 命令 .

调用
  • class 名字是:PrintHelloInConsoleCommand
  • 从 class 名称中删除 Command
    PrintHelloInConsoleCommand --> PrintHelloInConsole
  • CamelCase转换为snake_case:
    PrintHelloInConsole --> print_hello_in_console
  • 要调用的命令名称是:print_hello_in_console

你的class,class TryCommand(sublime_plugin.TextCommand)可以通过调用try命令运行,即view.run_command("try").


以下是一些其他示例:

  • class ClearConsoleCommand(sublime_plugin.WindowCommand)
    "clear_console" 命令
  • class InsertDateTimeCommand(sublime_plugin.TextCommand)
    "insert_date_time" 命令
  • class TestOKCommand(sublime_plugin.TextCommand)
    "" 没有创建命令——不要使用大写的单词,例如"TestOK" 中的 "OK"。请注意,这不会创建 "test_o_k" 命令
  • class MoveSelection(sublime_plugin.TextCommand)
    "move_selection" 命令——尽管在 class 名称中省略了 "Command",这仍然有效。在撰写本文时,ST 并未严格执行该要求(但在未来的版本中可能会更改)
  • class AutoSaverEvents(sublime_plugin.EventListener)
    "" 没有创建命令——没有调用事件侦听器,所以没有创建命令,ST 不期望 class 名称结束在 "Command"

有关插件的更多信息,请参阅 plugins section of the Sublime Text Unofficial Documentation,其中包含比官方文档更多的信息。