是否可以覆盖现有的VS Code命令,例如editor.action.clipboardPasteAction
?通过覆盖,我的意思是注册我自己的命令,每次调用原始命令时都会自动调用它。
例如,在按下editor.action.clipboardPasteAction
时(或其他一些快捷方式,取决于键绑定)调用Ctrl+V
,但是当在例如代码中显式调用它时调用commands.executeCommand("editor.action.clipboardPasteAction");
。通过调用
{
"command": "clipboard.paste",
"key": "ctrl+v",
"mac": "cmd+v",
"when": "editorTextFocus"
}
是否可以在我们自己的扩展中“拦截”命令调用,将其替换为我们自己的功能,然后可选择继续执行原始命令或发出应该暂停执行的信号?
我试图自己解决这个问题,但却找不到能提供完整功能的东西。我找到的最接近的解决方案是在例如Clipboard History扩展名。此扩展程序试图通过overriding the key bindings for the Paste Action in its package.json
实现“重载”:
editor.action.clipboardPasteAction
然后在clipboard.paste
命令中调用package.json
,如上所示。
这种方法的问题有两个:
commands.executeCommand()
中定义的键绑定不同的键绑定,该怎么办?如果有一种方法可以动态地(在我们的扩展注册期间)我们可以获得原始命令的键绑定,然后使用相同的键绑定注册我们的命令,则可以避免第一个问题。 我不确定这是否可行。
答案 0 :(得分:1)
在VSCode 1.37.1(截至2019年8月30日,当前)中,答案为否:无法拦截命令或枚举键绑定。
Issue #1431是 listen 命令的一项功能,它是在最近两个月内实现的,并且据说可以在当前的insiders版本中使用(尚未确认自己)。但是,请注意,计划中的功能不允许一个人拦截(在取消意义上)一个命令。
因此,即使该功能着陆,也可能有必要将其与其他一些监视功能结合使用,具体取决于所需的功能:
您可以观看tasks,即外部进程调用。
您可以枚举extensions,侦听它们发出的任何事件,调用选择发布的任何方法,并检查其package.json
文件。