Visual Studio Code 的快捷键

Visual Studio Code 让你可以直接从键盘完成大部分任务。本文解释了如何修改VS Code自带的默认快捷键。

注释

如果你在Mac上访问此页面,会看到Mac的快捷键。如果你用Windows或Linux访问,你会看到该平台的密钥。如果你需要其他平台的快捷键,把鼠标悬停在你感兴趣的按键上。

键盘快捷键编辑器

VS Code 通过键盘快捷指令编辑器提供了丰富的快捷键编辑体验。编辑器列出了所有带快捷键和不带快捷键的可用命令,并允许你通过可用动作更改、移除或重置它们的快捷键。要查找命令或快捷键,请使用搜索框输入命令或快捷方式来筛选列表。

要打开键盘快捷指令编辑器,请选择“偏好设置”>“文件 ”>“快捷键菜单”,或在命令面板中使用“偏好设置”命令(⌘K ⌘S(Windows,Linux Ctrl+K Ctrl+S)。

键盘快捷键

注释

快捷键会匹配你当前的键盘布局。例如,美国键盘布局中的快捷键 Cmd+\,当布局变为德语时,会显示为 Ctrl+Shift+Alt+Cmd+7。更改快捷键的对话框会根据你的键盘布局分配正确且想要的快捷键。

自定义 UI 动作快捷键

要自定义 UI 动作的快捷键,请右键点击工作台中的任意动作项,选择配置按键绑定。这会打开键盘快捷键编辑器,并筛选到对应的命令。如果作用具有但这会自动包含,方便你按需要设置快捷键。

键图扩展

键位扩展会修改 VS Code 的快捷键,使其与其他编辑器保持一致,因此你无需学习新的键盘快捷键。

选择偏好>文件>从......菜单中迁移键盘快捷方式,获取热门按键图扩展名列表。市场中还有一个Keymaps扩展类别

键盘快捷键参考

我们有一个可打印的默认快捷键版本。选择“帮助>键盘快捷键参考”,以显示适合打印的简明PDF版本,方便参考。

以下链接提供三种平台特定版本的访问(美式英语键盘):

检测键盘快捷键冲突

如果你安装了很多扩展,或者修改了键盘快捷方式,可能会有快捷键冲突,也就是同一个快捷键被映射到多个命令上。这可能导致混淆,尤其是当不同的快捷键在编辑器中移动时进出作用域时。

右键点击快捷键列表中的某个项目,选择“显示相同按键绑定”,即可查看所有使用相同快捷键的条目。

显示键盘快捷键冲突菜单

排查键盘快捷键

要排查键盘快捷键问题,你可以执行命令“开发者:切换键盘快捷键故障排除”。这会激活对已调度快捷键的日志记录,并打开带有相应日志文件的输出面板。

然后你可以按你想要的快捷键,查看VS Code检测到哪个快捷键以及调用了什么命令。

例如,当按压时指挥官+/在 macOS 的代码编辑器中,日志输出为:

[KeybindingService]: / Received  keydown event - modifiers: [meta], code: MetaLeft, keyCode: 91, key: Meta
[KeybindingService]: | Converted keydown event - modifiers: [meta], code: MetaLeft, keyCode: 57 ('Meta')
[KeybindingService]: \ Keyboard event cannot be dispatched.
[KeybindingService]: / Received  keydown event - modifiers: [meta], code: Slash, keyCode: 191, key: /
[KeybindingService]: | Converted keydown event - modifiers: [meta], code: Slash, keyCode: 85 ('/')
[KeybindingService]: | Resolving meta+[Slash]
[KeybindingService]: \ From 2 keybinding entries, matched editor.action.commentLine, when: editorTextFocus && !editorReadonly, source: built-in.

在示例日志中,第一个按键事件是元左翼密钥(指令长)且无法被派遣。第二个按键事件是斜杀key()和 分派为/meta+[Slash]. 有两个快捷键条目映射于meta+[Slash]匹配的那张是指挥官编辑。行动。评论线,其中状况编辑文本聚焦 & !编辑只读并且是内置的键盘快捷键条目。

查看修改过的键盘快捷键

要筛选列表只显示你修改过的快捷方式,请在“更多作”(...)菜单中选择“显示用户按键绑定”命令。这会应用@source:用户筛选到键盘快捷键编辑器(代码为“用户”)。

默认键盘快捷键

高级定制

VS Code 会记录你在keybindings.json文件。为了高级定制,你也可以直接修改keybindings.json档案。

要打开keybindings.json文件:

  • 打开键盘快捷指令编辑器,然后选择编辑器标题栏右侧的“打开键盘快捷方式”(JSON)按钮。

    打开键盘快捷键 JSON 按钮

  • 或者,在命令面板中使用“打开默认键盘快捷方式”(JSON)命令(Windows,Linux Ctrl+Shift+P)。

键盘规则

VS Code 中的键盘快捷指令配置也称为键盘规则。每条规则包含以下属性:

  • 说明: 表示按下的按键,例如 ⌘F(Windows,Linux Ctrl+F)。
  • 指挥: VS Code 命令的标识符,用于执行workbench.view.explorer以打开探索者视图。
  • :(可选)包含一个根据当前上下文评估的布尔表达式。

和弦(两个独立的按键动作)通过用空格分隔这两个按键来描述。例如,Ctrl+K Ctrl+C

当按下按键时,会应用以下评估规则:

  • 规则从进行评估。
  • 第一个规则同时匹配说明以及条款被接受。
  • 如果发现了规则,就不再处理新的规则。
  • 如果找到一条规则并且具有指挥set,指挥被处决。

附加keybindings.json规则在运行时附加到默认规则底部,从而允许它们覆盖默认规则。该keybindings.json文件被 VS Code 监控,因此在运行 VS Code 时编辑文件会更新规则。

键盘快捷键调度通过分析用 JSON 表达的规则列表来完成。以下是一些示例:

// Keyboard shortcuts that are active when the focus is in the editor
{ "key": "home",            "command": "cursorHome",                  "when": "editorTextFocus" },
{ "key": "shift+home",      "command": "cursorHomeSelect",            "when": "editorTextFocus" },

// Keyboard shortcuts that are complementary
{ "key": "f5",              "command": "workbench.action.debug.continue", "when": "inDebugMode" },
{ "key": "f5",              "command": "workbench.action.debug.start",    "when": "!inDebugMode" },

// Global keyboard shortcuts
{ "key": "ctrl+f",          "command": "actions.find" },
{ "key": "alt+left",        "command": "workbench.action.navigateBack" },
{ "key": "alt+right",       "command": "workbench.action.navigateForward" },

// Global keyboard shortcuts using chords (two separate keypress actions)
{ "key": "ctrl+k enter",    "command": "workbench.action.keepEditor" },
{ "key": "ctrl+k ctrl+w",   "command": "workbench.action.closeAllEditors" },

已接受的密钥

说明由修饰符和密钥本身组成。

以下修饰语被接受:

纲领 修饰符
macOS Ctrl+Shift+Alt+Cmd+
窗户 Ctrl+Shift+Alt+Win+
Linux Ctrl+Shift+Alt+Meta+

以下密钥被接受:

  • F1-F19,A-Z,0-9
  • `-=[]\;', , /
  • 右,翻页下页结束主页
  • Tab回车退出空格退格删除
  • 暂停中断大写锁定插入
  • numpad0-numpad9,numpad_multiply,numpad_add,numpad_separator
  • numpad_subtract,numpad_decimal,numpad_divide

命令参数

你可以带参数调用命令。如果你经常对特定文件或文件夹执行同样作,这很有用。你可以添加自定义键盘快捷方式,完全实现你想要的功能。

以下是覆盖Enter键以打印部分文本的示例:

{
  "key": "enter",
  "command": "type",
  "args": { "text": "Hello World" },
  "when": "editorTextFocus"
}

类型指挥部将收到{“text”:“你好,世界”}作为第一个参数,并在文件中添加“Hello World”,而不是生成默认命令。

关于需要参数的命令的更多信息,请参见内置命令

运行多个命令

键盘快捷方式可以通过以下命令顺序配置为连续运行多个命令runCommands.

  • 运行几个无参数的命令:

    以下示例将当前行向下复制,将当前行标记为注释,并将光标移动到复制的行。

    {
      "key": "ctrl+alt+c",
      "command": "runCommands",
      "args": {
        "commands": [
          "editor.action.copyLinesDownAction",
          "cursorUp",
          "editor.action.addCommentLine",
          "cursorDown"
        ]
      }
    },
    
  • 传递命令参数:

    本示例创建一个无标题的新TypeScript文件并插入自定义片段。

    {
      "key": "ctrl+n",
      "command": "runCommands",
      "args": {
        "commands": [
          {
            "command": "workbench.action.files.newUntitledFile",
            "args": {
              "languageId": "typescript"
            }
          },
          {
            "command": "editor.action.insertSnippet",
            "args": {
              "langId": "typescript",
              "snippet": "class ${1:ClassName} {\n\tconstructor() {\n\t\t$0\n\t}\n}"
            }
          }
        ]
      }
    },
    

注意,命令由runCommands接收“ARGS”作为第一个论点。在前面的例子中,workbench.action.files.newUntitledFile接球{“languageId”: “typescript” }这是它唯一的论点。

要通过多个论点,你需要具备“ARGS”作为数组:

{
  "key": "ctrl+shift+e",
  "command": "runCommands",
  "args": {
    "commands": [
      {
        // command invoked with 2 arguments: vscode.executeCommand("myCommand", "arg1", "arg2")
        "command": "myCommand",
        "args": ["arg1", "arg2"]
      }
    ]
  }
}

要传递一个数组作为第一个参数,将该数组包裹在另一个数组中:“ARGS”:[ [1, 2, 3].

移除键盘快捷键

要移除键盘快捷键,请在键盘快捷指令编辑器中右键点击该条目,选择“移除按键绑定”。

通过使用keybindings.json文件,在-指挥而且这个规则会是移除规则。

这里有一个例子:

// In Default Keyboard Shortcuts
...
{ "key": "tab", "command": "tab", "when": ... },
{ "key": "tab", "command": "jumpToNextSnippetPlaceholder", "when": ... },
{ "key": "tab", "command": "acceptSelectedSuggestion", "when": ... },
...

// To remove the second rule, for example, add in keybindings.json:
{ "key": "tab", "command": "-jumpToNextSnippetPlaceholder" }

要用空动作覆盖特定的键盘快捷键规则,你可以指定空命令:

// To override and disable any `tab` keyboard shortcut, for example, add in keybindings.json:
{ "key": "tab", "command": "" }

键盘布局

注释

本节仅涉及键盘快捷键,不涉及在编辑器中输入。

键是虚拟键的字符串表示,按键时不一定与生成的字符相关。更准确地说:

  • 参考文献:虚拟密钥代码(Windows)
  • TabVK_TAB (0x09)
  • ;对于VK_OEM_1 (0xBA)
  • =对于VK_OEM_PLUS (0xBB)
  • ,对于VK_OEM_COMMA (0xBC)
  • -对于VK_OEM_MINUS (0xBD)
  • 对于VK_OEM_PERIOD (0xBE)
  • /对于VK_OEM_2 (0xBF)
  • `对于VK_OEM_3 (0xC0)
  • [对于VK_OEM_4 (0xDB)
  • \对于VK_OEM_5 (0xDC)
  • ]对于VK_OEM_6 (0xDD)
  • '对于VK_OEM_7 (0xDE)
  • 等等。

不同的键盘布局通常会重新定位这些虚拟键,或改变按下时产生的字符。当使用与标准美式不同的键盘布局时,Visual Studio Code 会执行以下作:

所有键盘快捷键都按照当前系统的键盘布局在UI中渲染。例如,分割编辑器使用法语(France)时,键盘布局现在显示为 Ctrl+*

渲染键盘快捷键

编辑时keybindings.jsonVS Code 会突出显示具有误导性的快捷键,即在文件中以标准美国键盘布局生成字符的快捷键表示,但在当前系统键盘布局下需要按不同标签的快捷键。例如,使用法语(France)键盘布局时,默认快捷键规则的样式如下:

keybindings.json指导

还有一个UI控件,帮助在编辑时输入快捷键规则keybindings.json.要启动定义按键绑定控件,按 ⌘K ⌘K(Windows,Linux Ctrl+K Ctrl+K)。控件监听按键声,并在文本框及其下方显示VS Code检测到的按键,显示出当前键盘布局下的序列化JSON表示。输入好想要的按键组合后,你可以按回车,然后插入规则片段。

键盘快捷小部件

注释

在Linux上,VS Code启动时会检测你当前的键盘布局,然后缓存这些信息。我们建议你在更改键盘布局时重启 VS Code。

键盘布局无关的装订

通过扫描码,可以定义不会因键盘布局变化而改变的快捷键。例如:

{ "key": "cmd+[Slash]", "command": "editor.action.commentLine", "when": "editorTextFocus" }

接受的扫描码:

  • [F1]-[F19][KeyA]-[KeyZ][Digit0]-[Digit9]
  • [反引号]、[减号]、[等号]、[左括号]、[右括号]、[反斜杠]、[分号]、[引用]、[逗号]、[句号]、[斜杠]
  • [箭头左][箭头向上][箭头右侧][箭头向下][上页][向下页][结束][首页]
  • [Tab]、[回车]、[Esc]、[空格]、[退格]、[删除]
  • [暂停][大写锁定][插入]
  • [数字键盘0]-[数字键盘9][数字键盘倍加]数字键盘添加数字键盘逗号]
  • [数字键盘减法]、[数字十进制]、[数字键盘除法]

当从句上下文

VS Code 通过可选功能让你精确控制何时启用键盘快捷键条款。如果你的快捷键没有该快捷键始终全球可用。A子句在启用键盘快捷键时会判定为真或假。

VS Code 根据 VS Code UI 中可见和激活的元素设置各种上下文键和具体值。例如,内置的“开始调试”命令中带有键盘快捷键 F5,只有在有合适的调试器可用时才会启用(上下文调试器可用且编辑器不处于调试模式(上下文inDebugMode是错误的):

在键盘短视频编辑器中开始调试时(Start Debugging when)条款

你也可以直接在默认情况下查看某个键盘快捷键的when从句keybinding.json (偏好设置:打开默认键盘快捷键(JSON)):

{ "key": "f5",  "command": "workbench.action.debug.start",
                   "when": "debuggersAvailable && !inDebugMode" },

条件算符

对于子句条件表达式中,以下条件运算符对键盘快捷键非常有用:

Operator 象征 示例
平等 == “editorLangId == typescript”
不平等 != “resourceExtname != .js”
或者 || “isLinux||isWindows”
而且 && “textInputFocus & !editorReadonly”
比赛 =~ “resourceScheme =~ /^untitled$|^file$/”

你可以在when子句上下文参考中找到完整的when子句条件运算符列表。

可用上下文

你可以找到一些可用的在 what 子句上下文引用中。

那里的列表并不详尽,你可以找到其他的通过在键盘快捷指令编辑器中搜索和筛选(偏好设置:打开键盘快捷方式)或查看默认选项来获取子句上下文keybindings.json文件(偏好设置:打开默认键盘快捷键(JSON))。

重构自定义键盘快捷键

editor.action.codeAction命令允许你为特定的重构(代码作)配置键盘快捷键。例如,下面的快捷键触发了 Extract 函数,重构代码动作:

{
  "key": "ctrl+shift+r ctrl+e",
  "command": "editor.action.codeAction",
  "args": {
    "kind": "refactor.extract.function"
  }
}

这在重文章中有详细介绍,你可以了解不同类型的代码动作以及如何在多次重构情况下优先排序它们。

常见问题

我怎么知道绑定到某个特定键的命令?

在键盘快捷键编辑器中,你可以筛选特定按键,查看哪些命令绑定在哪些键上。在下面的截图中,你可以看到 Ctrl+Shift+P 被绑定为“显示所有命令”以调出命令调色板。

键盘快捷键快速概述

例如,如何为作添加快捷键,比如添加 Ctrl+D 来删除行

找到一个触发默认快捷键作的规则,然后写一个修改版的keybindings.json文件:

// Original, in Default Keyboard Shortcuts
{ "key": "ctrl+shift+k",          "command": "editor.action.deleteLines",
                                     "when": "editorTextFocus" },
// Modified, in User/keybindings.json, Ctrl+D now will also trigger this action
{ "key": "ctrl+d",                "command": "editor.action.deleteLines",
                                     "when": "editorTextFocus" },

我怎样才能为某些文件类型添加快捷键?

使用该编辑 LangID上下文键条款:

{ "key": "shift+alt+a",           "command": "editor.action.blockComment",
                                     "when": "editorTextFocus && editorLangId == csharp" },

我已经修改了我的键盘快捷键keybindings.json;为什么它们不起作用?

最常见的问题是文件中的语法错误。否则,试着移除条款或选择不同说明.不幸的是,目前这还是一个不断试错的过程。