我正在尝试创建一个崇高的文本插件。我成功创建了它,现在我正在尝试将一个项目添加到菜单中,当它被选中时,它将调用该插件。我在将菜单项插入正确的位置时遇到问题,并在创建后调用插件。
说我有以下插件:
import sublime, sublime_plugin
class ExampleCommand(sublime_plugin.TextCommand):
def run(self, edit):
self.view.insert(edit, 0, "Hello, World!")
我在
创建了一个文件夹C:\ Users \" userName" \ AppData \ Roaming \ Sublime Text 3 \ Packages \" My Plugin"
并将插件文件添加到该目录。然后,我在名为Main.sublime-menu
[
{
"id": "file",
"children":
[
{"id": "save"},
{"caption": "My Plugin"},
{ "command": "myPlugin" }
]
}
]
问题是,我在菜单中收到两个My Plugin
和myPlugin
项,并且在exit
菜单后面。我希望它在保存之后。此外,当我选择My Plugin
时,我在控制台中收到错误:
无法解析命令:
如何在save
菜单项后添加菜单项,并让菜单项调用名为myPlugin
的插件?
答案 0 :(得分:1)
插件中的命令名不是从存储它们的python文件的名称中获取的;它们派生自实现命令的类的名称,以便多个命令可以存储在单个文件中。
此外,命令名称为snake cased,并强制为全部小写。如果您的类未以该样式命名,Sublime将通过以下方式将其转换为该样式:
Command
文本(如果存在)这意味着对于上面的示例,您将使用的命令名称为example
。你不能使它成为myPlugin
,因为它有一个大写字符。命名类MyPluginCommand
,MyPlugin
或my_plugin
会创建一个名为my_plugin
的命令,该命令尽可能接近。
Main.sublime-menu
的示例内容未遵循children
数组中项目的正确数据结构,这就是项目出现两次的原因。有一些unofficial documentation on the menu format概述了菜单项的字段和结构。
将项目追加到菜单末尾的原因是因为多个包中的菜单如何合并在一起。基本上一些项目中有一个id
字段,为它们提供唯一的ID;当多个项目具有相同的ID时,它们会按照它们来自的软件包的顺序连接在一起。
您的菜单项使用id
file
来指示文件菜单,然后包含id
save
;由于默认主菜单不包含具有该ID的项目,因此您的项目会卡在菜单的末尾。
您在控制台中看到的错误是因为标题为My Plugin
的菜单项不包含command
字段;相反,它后面的菜单项指定command
并且不指定caption
。 Sublime告诉你它无法解析命令,因为它无法找到它。
为了做你想做的事,你想要一个看起来像这样的Main.sublime-menu
:
[
{
"id": "file",
"children":
[
{
"caption": "My Plugin",
"command": "my_plugin"
}
]
},
]
这假定您已重命名实现上述命令的类。