【问题标题】:How can I find what command a keybinding is bound too easily?我怎样才能找到一个键绑定太容易绑定的命令?
【发布时间】:2022-05-10 10:45:00
【问题描述】:

在 VSCode 中: 我想按下一个组合键,看看它也绑定了什么命令,比如 Emacs 中的“C-h k”。

【问题讨论】:

  • 打开键盘快捷键(从齿轮图标),您可以搜索“CTRL X X”或其他任何内容以查看绑定到这些键/以及 ALT/Shift/等的内容。
  • 很合理,谢谢!
  • 虽然当然更直观的是能够按下组合而不是必须输入它。将为此发布功能请求。
  • 备案:Tobias 提交Issue 38602

标签: visual-studio-code


【解决方案1】:

VS Code 有几个用于获取键绑定信息的内置工具

因此,有一个工具可以提供您可能需要的有关键盘快捷键的所有信息,并实时提供给您。它被称为键盘快捷键疑难解答。它是一个有点高级的工具,因为它是基于文本的。它不仅提供了 Keybinding 执行的命令,而且还提供了 when 子句。它还提供源(用户、内嵌、扩展等)。

这是一个相当大的话题,在 IMO 中的记录非常少,这可能就是为什么您没有找到任何关于它的信息,或者发现它可以满足您的需求。

因为我已经编写了下面的答案,所以我可以告诉你我花了 2 个小时来写这个答案,所以希望它会有所帮助。对于渴望编写 VS Code 扩展的人来说,它是一个很棒的工具,因为它对它提供的信息很有帮助。




V.S. Code 的内置键盘快捷键疑难解答

注意:故障排除工具是一个基于文本的日志记录工具,因此有些人一开始可能有点难以理解,尤其是如果您使用的图形桌面没有推广 CmdL 的使用,例如 MacOS 或 Windows。

此外,疑难解答程序还会打印任何人可能需要的有关所使用的键绑定的所有信息;它提供了实时打印“键盘快捷键”信息的豪华功能,同时用户按下按键。一方面,它是一个有用的工具,另一方面,它是一个展示团队质量的小强者,以及编写 V.S. 的开源社区成员。代码。




使用键盘快捷键疑难解答

F1打开快捷菜单;打开后,输入以下内容:

**       "Keyboard Shortcuts Troubleshooting"**

在您键入时,查看出现和消失的不同选项。您不必输入几个字符即可看到所需的选项,如下所示:

**       "Developer: Toggle Keyboard Shortcuts Troubleshooting"**

在您选择上述选项后 - 假设您正确地遵循了说明 - 疑难解答现在应该切换到 'ON'




查看疑难解答者的日志

您打开了“键盘快捷方式疑难解答”,但要查看其日志,您需要打开终端所在的面板,而不是术语

要使用疑难解答,请导航到 OUTPUT 面板,然后从 OUTPUT 面板的下拉菜单中选择 Log (window)

如果您无法正常工作,下面的图片应该有助于说明问题。

在图像中,您可以看到我打开了 F1 快速菜单,其中显示了将故障排除程序切换为打开的正确选项。我也已经打开了 OUTPUT 窗口并登录到它,所以你可以看到使用疑难解答应该是什么样子。

[![疑难解答,修复,写入,“V.S. 代码键盘快捷键”][1]][1]


阅读疑难解答:


在 sn-p 中,在键绑定图标下,我添加了当我使用如下所示的键绑定(或键盘快捷键)时疑难解答程序打印的输出。

CTRL + SHIFT + ~

[2022-05-09 19:01:12.397] [renderer1] [info] [KeybindingService]: \ From 2 keybinding entries, matched workbench.action.tasks.toggleProblems, when: panelFocus || terminalIsOpen, source: user.
[2022-05-09 19:01:13.146] [renderer1] [info] [KeybindingService]: / Received  keydown event - modifiers: [ctrl,shift], code: Backquote, keyCode: 192, key: ~
[2022-05-09 19:01:13.146] [renderer1] [info] [KeybindingService]: | Converted keydown event - modifiers: [ctrl,shift], code: Backquote, keyCode: 86 ('`')
[2022-05-09 19:01:13.147] [renderer1] [info] [KeybindingService]: | Resolving ctrl+shift+[Backquote]

了解一些键绑定很重要,因为我们想确保在读取输出时它与键绑定相关,因此我们需要了解键绑定。

键绑定是我自己编写的自定义键绑定。它切换*问题面板编辑器或终端处于焦点时

现在每行的第一部分如下所示:

[2022-05-09 18:55:14.623] [renderer1] [info] [KeybindingService]

但这些都不是由 Troubleshooter 创建的,它是 Window-logger 机制的一部分。它将该格式添加到每一行的开头。

需要注意的是,renderer1 的意思是“VS Code 1”。如果我打开了两个 VS Code 实例,一个是 [renderer 1],另一个是 [renderer 2]

[KeybindingService] 是对“键盘快捷键疑难解答”的引用

好的,所以我们要从每一行的开头去掉所有的废话,然后我会手动解析这些行,这样你就可以看到我们有什么了。

    1. [LOG]: / Received  keydown event - 
        modifiers: [ctrl,shift], 
        code: Backquote, 
        keyCode: 192, 
        key: ~

    2. [LOG]: | Converted keydown event - 
        modifiers: [ctrl,shift],
        code: Backquote, 
        keyCode: 86 ('`')
    
    3. [LOG]: | Resolving ctrl+shift+[Backquote]
    
    4. [LOG]: \ From 2 keybinding entries, 
        matched workbench.action.tasks.toggleProblems, 
        when: panelFocus || terminalIsOpen, 
        source: user.
在我们讨论这些行之前,请记住使用的键绑定是:

CTRL + SHIFT + ~

共有 4 行,让我们按顺序介绍每一行:


第 1 行

  • 修饰符:修饰符是在按下另一个键时按住的键。修饰符包括键 CTRLSHIFTALTSUPER

  • 代码: 代码是按下的键的代码。这里写着"backquote",有时也称为“Back-tic”

最重要的一个词是RECEIVED,它是一个开头的词行,从此以后;第一行应该解释为含义:

收到的修饰符 CTRL + SHIFT 和键码 '`'


第 2 行

第二行解释了发生的转换。这就是 VS Code 如何处理所有不同的布局、格式,甚至是不同键盘所具有的键。每个键盘上的键都被转换为所谓的虚拟键。由于虚拟键是标准化的,因此将键转换为适当的虚拟键可确保所有键盘的工作方式相同。你可以看到第一行收到了什么,第二行 VS Code 也转换了它。


第 3 行

第三行接受转换后的输入并检查是否有任何匹配该键绑定的内容,然后返回找到的匹配项。在这里,我们可以看到我有两个使用此键绑定的键盘快捷键。那是因为当 when 子句发生变化时,我让键绑定做其他事情。它甚至告诉我们什么是 when 子句。

这是这里的门票,正是您想要的:

我们终于有了匹配的命令

我们得到的信息是:

匹配:workbench.action.tasks.toggleProblems,
当:panelFocus ||终端打开,

所以这意味着命令workbench.action.tasks.toggleProblems被执行了……

当下面的 panelFocus || terminalIsOpen 返回 true 时。

并且,when-clause 被解释为意思是,“当面板处于焦点时,或者当终端打开时”

最后它告诉你命令的来源是“USER”。来源也可以是“扩展”和/或“内置”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-17
    相关资源
    最近更新 更多