摩纳哥编辑器 - `Action` 和 `Command` 之间的区别?

问题描述 投票:0回答:2

在摩纳哥编辑器实例中,您可以调用

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') }
)

文档描述了类型定义、属性和方法。

但是,它缺乏提供何时使用每个工具、它们在编辑器中显示的位置以及每个工具提供的内容的上下文。

动作和命令有什么区别?

monaco-editor
2个回答
6
投票

我个人的印象是,行动是一种进化的命令。首先引入了命令,后来认识到需要更多功能(例如上下文菜单集成),因此创建了

Action
。由于兼容性原因,当时无法删除
Command
,因此两者至今仍然存在。


0
投票

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
是不同的抽象,一个不能替代另一个。

© www.soinside.com 2019 - 2024. All rights reserved.