覆盖扩展中现有的 Visual Studio Code 命令

2024-01-14

是否可以覆盖现有的 VS Code 命令,例如editor.action.clipboardPasteAction?通过覆盖,我的意思是注册我自己的命令,每次应该调用原始命令时都会自动调用该命令。

例如,editor.action.clipboardPasteActionCtrl+V被按下(或其他快捷键,取决于键绑定),而且当它在代码中显式调用时,例如通过调用各种扩展

commands.executeCommand("editor.action.clipboardPasteAction");

是否可以在我们自己的扩展中“拦截”命令调用,将其替换为我们自己的功能,然后可以选择继续执行原始命令或发出应暂停执行的信号?

我试图自己解决这个问题,但找不到任何提供完整功能的东西。我发现的最接近的解决方案是例如中使用的解决方案剪贴板历史记录 https://github.com/aefernandes/vscode-clipboard-history-extension扩大。这个扩展试图通过以下方式实现“重载”覆盖其粘贴操作的键绑定package.json https://github.com/aefernandes/vscode-clipboard-history-extension/blob/master/package.json:

{
    "command": "clipboard.paste",
    "key": "ctrl+v",
    "mac": "cmd+v",
    "when": "editorTextFocus"
}

然后调用editor.action.clipboardPasteActionclipboard.paste命令如上所示。

这种方法的问题有两个:

  1. 如果“覆盖”的原始命令具有与我们定义的键绑定不同的键绑定,该怎么办package.json?
  2. 如果原始命令不是通过键盘快捷键调用而是通过例如通过一些扩展使用commands.executeCommand()或通过命令面板。

如果有一种方法可以动态地(在我们的扩展注册期间)我们可以获取原始命令的键绑定,然后使用相同的键绑定注册我们的命令,那么第一个问题就可以避免。 我也不确定这是否可能。


在 VSCode 1.37.1(截至 2019-08-30)中,答案是no:不可能拦截命令,也不可能枚举键绑定。

  • 我怎么知道?我最近花了很多时间翻阅扩展API https://code.visualstudio.com/api/references/vscode-api而且,好吧,他们不在那里。当然,我可能忽略了一些不明显的事情。

但有一个功能listen命令是问题 #1431 https://github.com/microsoft/vscode/issues/1431,它是在过去两个月内才实施的,并且据说在当前可用insiders https://code.visualstudio.com/insiders/发布(我自己还没有证实)。然而,请注意,计划中的功能不允许人们截距(在取消的意义上)命令。

因此,即使该功能落地,也可能需要将其与其他一些监控功能结合使用,具体取决于所需的功能:

  • 你可以看tasks https://code.visualstudio.com/api/references/vscode-api#tasks,即外部进程调用。

  • 您可以查看编辑器的更改,例如选择 https://code.visualstudio.com/api/references/vscode-api#window.onDidChangeTextEditorSelection or contents https://code.visualstudio.com/api/references/vscode-api#workspace.onDidChangeTextDocument.

  • 你可以枚举扩展 https://code.visualstudio.com/api/references/vscode-api#extensions,监听它们发出的任何事件,调用它们的任何方法选择发布,并检查他们的package.json https://code.visualstudio.com/api/references/vscode-api#Extension.packageJSON files.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

覆盖扩展中现有的 Visual Studio Code 命令 的相关文章

随机推荐

  • 并发写入同一缓存行中的不同位置

    假设我有一个 C 11 应用程序 其中两个线程写入不同但邻近内存位置 使用指向原始类型的简单指针 我能否确定这两个写入最终都会进入内存 可能在两者都达到boost barrier http www boost org doc libs 1
  • Rabbitmq 使用 .NET 使用单个同步调用检索多条消息

    有没有办法使用 NET 使用单个同步调用来接收多条消息 我见过question https stackoverflow com questions 17005515 rabbitmq retrieve multiple messages u
  • 如何对 Rails 中 Prawnto 生成的 PDF 进行内联格式(粗体和下划线)?

    我在 Rails 应用程序中使用 Prawn 和 Prawnto 插件生成 PDF 文件 我创建一个带有标准文本区域的标准表单 并将其作为 PDF 文件的正文提交 但是 我需要能够使用以下方式格式化单词和句子 bold 强调 也许不同的字体
  • 受影响的行实体框架

    如何获取 SaveChanges 后受影响的行数 The 保存更改 http msdn microsoft com en us library bb336792 aspx方法返回所有已更改项目的 int MSDN 片段 返回值 类型 Sys
  • 在javascript中选择区域/矩形

    我需要通过鼠标在 HTML5 页面中选择一个区域 然后我将与该区域内的元素进行交互 一定有一种简单的方法可以做到这一点 但我找不到现成的任何东西 不幸的是 jquery UI 选择不起作用 因为它似乎只支持一个父元素 有没有现成的东西可以在
  • 如何以编程方式突出显示 UIButton?

    很多用户抱怨 iPhone 上的小 i 信息按钮很难触摸 好吧 很简单 我只是在它后面贴了一个又大又大的隐形按钮 即使你用最粗心的手指触摸也不会错过它 当你触摸它时 它就会执行 infoButtonAction 事实是 我想让信息按钮本身闪
  • 递归算法的空间复杂度

    我在一次面试中被问到 解决问题的有效方法是检查回文 现在我可以做两件事 从 i 0 开始到 i n 2 并比较第 i 个和第 n 个字符是否相等 我可以使用递归来检查第一个和最后一个是否相同 并且字符串的其余部分是否为回文 第二个是递归的
  • 垃圾收集机制如何工作? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 用外行术语来说 垃圾收集机制是如何工作的 如何识别对象可用于垃圾回收 还有 做什么Reference Counting Mark an
  • 如何判断 Map 是否有默认值?

    有没有办法检查是否Map有定义的默认值吗 我想要的是相当于myMap getOrElse x y 如果关键在哪里x不在地图上 if myMap有默认值 返回该值 否则返回y 该问题的一个人为示例 scala gt def f m Map S
  • 如何在 MFC 应用程序中托管 WPF 表单

    我正在寻找有关在现有 MFC 应用程序中托管 WPF 表单的任何资源 谁能指出我如何做到这一点的正确方向 据我了解 我自己没有尝试过 这几乎就像将 WPF 控制权交给父级句柄一样简单 这是一个演练 在 Win32 中托管 WPF 内容 ht
  • 如何从.net core实体框架调用带有表值参数的存储过程

    我有一个带有表值参数的存储过程 我必须从 net core 中的实体框架调用它 我在上下文对象上找不到任何 API 我尝试过使用 ADO net API 它有效 但现在我必须从 net core 中的 EF 调用它 我必须调用的存储过程返回
  • PHP 多维数组访问

    假设我在 PHP 中有一个多维数组 例如 this array array string name gt string string array gt array string key gt string val 如何访问字符串数组键值对
  • XML 解析错误:文档末尾有多余内容

    我的 xml 文件中出现此错误 XML Parsing error Extra content at the end of the document 我正在使用 Notepad 它在标题标签中显示第二个红色单词
  • Linq 中的 Union 与 Concat

    我有一个问题Union and Concat var a1 new 1 2 Union new 1 2 O P 1 2 var a2 new 1 2 Concat new 1 2 O P 1 2 1 2 var a3 new 1 2 Uni
  • 如何在 Android 设备上的 Flutter 应用程序中显示 TIFF 图像?

    我们的应用程序允许用户建立各种类型的资源库 例如 PDF 电子表格等 我们存储在 S3 上的几乎任何 MIME 类型的文档 当用户点击查看任何这些资源时 我们基本上可以确定我们使用的是 iOS 设备还是 Android 设备 在 iOS 上
  • 频繁使用 localStorage 会减慢我的网站速度吗?

    我正在开发一个 HTML5 游戏 我需要知道频繁更新 localStorage 属性是否会减慢页面速度 我实际上将英雄的位置存储在四个 localStorage 属性中 两个用于实际位置 两个用于碰撞检测系统中使用的过去位置 并每 1 秒间
  • 无需登录或没有任何安全性即可浏览 Nexus 存储库

    我这里有一个非常简单的用例 用例 要求 我想配置我所有的 Nexus 存储库 与我在中看到的非常相似https oss sonatype org view repositories appfuse releases browseindex
  • gitlab-ci.yml 文件中 [STRING] 的正则表达式

    我试图在 gitlab ci yml 文件中设置部署阶段的规则 如果 git 提交消息具有这种格式的特定 STRING 那么它应该部署到编写此规则的特定环境 Deploy to QAT environment deploy qat stag
  • WPF:处理损坏的字体缓存

    我有一个 WPF 应用程序 NET 3 5 通常在我们客户的 XP 计算机上运行 在过去 5 个月中 已发生 3 次损坏的字体缓存导致应用程序在加载时停止响应 删除字体缓存these http support microsoft com k
  • 覆盖扩展中现有的 Visual Studio Code 命令

    是否可以覆盖现有的 VS Code 命令 例如editor action clipboardPasteAction 通过覆盖 我的意思是注册我自己的命令 每次应该调用原始命令时都会自动调用该命令 例如 editor action clipb