在摩纳哥编辑器实例中,您可以调用
addAction
或addCommand
两者都提供了基于按键事件执行功能的能力
在线游乐场提供了如何向编辑器实例添加命令或如何添加操作的示例。
操作示例
editor.addAction({
id: 'my-unique-id',
label: 'My Label!!!',
keybindings: [monaco.KeyMod.CtrlCmd | monaco.KeyCode.Enter],
run: function() { alert('action called') }
});
命令示例
editor.addCommand(
monaco.KeyMod.CtrlCmd | monaco.KeyCode.Enter,
function() { alert('called command') }
)
文档描述了类型定义、属性和方法。
但是,它缺乏提供何时使用每个工具、它们在编辑器中显示的位置以及每个工具提供的内容的上下文。
动作和命令有什么区别?
我个人的印象是,行动是一种进化的命令。首先引入了命令,后来认识到需要更多功能(例如上下文菜单集成),因此创建了
Action
。由于兼容性原因,当时无法删除Command
,因此两者至今仍然存在。
Action
和 Command
之间存在一些关键区别:
Action
是特定于编辑器的。您可以使用 addAction
的 monaco.editor.IStandaloneCodeEditor
方法添加操作。 Command
可以使用 addCommand
的 IStandaloneCodeEditor
方法添加,这也使其成为编辑器特定的(添加的命令是 anonymous 并且只能通过按键绑定触发);但是,还有另一种(更常见)的方法来注册命令:通过全局 monaco.editor.registerCommand
函数。这样你就可以为所有编辑者注册一个命名命令;Action
出现并且可以从命令面板触发(摩纳哥编辑器中的 F1,或 vscode 中的 Ctrl+Shift+P),而 Command
则不会(尽管它被称为 命令面板);monacoApi.languages.CodeActionProvider
,只能使用Command
。例如。要提供自定义重构功能,您必须注册一个 Command
并在 CodeActionProvider
中提供它以使其出现在重构菜单中。因此
Action
和 Command
是不同的抽象,一个不能替代另一个。