是否可以覆盖现有的 VS Code 命令,例如editor.action.clipboardPasteAction?通过覆盖,我的意思是注册我自己的命令,每次应该调用原始命令时都会自动调用该命令。
例如,editor.action.clipboardPasteAction当Ctrl+V按下时调用(或其他一些快捷方式,取决于键绑定),但也可以在各种扩展的代码中通过调用显式调用
commands.executeCommand("editor.action.clipboardPasteAction");
Run Code Online (Sandbox Code Playgroud)
是否可以在我们自己的扩展中“拦截”命令调用,用我们自己的功能替换它,然后选择继续执行原始命令或发出信号应暂停执行?
我试图自己弄清楚,但找不到任何提供完整功能的东西。我找到的最接近的解决方案是在例如剪贴板历史扩展中使用的解决方案。此扩展试图通过覆盖其粘贴操作的键绑定package.json来实现“重载” :
{
"command": "clipboard.paste",
"key": "ctrl+v",
"mac": "cmd+v",
"when": "editorTextFocus"
}
Run Code Online (Sandbox Code Playgroud)
然后editor.action.clipboardPasteAction在clipboard.paste如上所示的命令中调用。
这种方法的问题是双重的:
package.json怎么办?commands.executeCommand()或通过命令调色板通过某些扩展调用,该怎么办。如果有一种方法可以动态地(在我们的扩展注册期间)获取原始命令的键绑定,然后使用相同的键绑定注册我们的命令,那么第一个问题就可以避免。我也不确定这是否可能。