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操作自定义键盘快捷键,请在工作台中右键单击任何操作项,并选择配置键盘快捷键。这将打开键盘快捷键编辑器,并过滤到相应的命令。如果该操作有当该条目会自动包含,使您更容易设置符合您需求的键盘快捷键。
键盘映射扩展
Keymap扩展修改了VS Code的快捷键,以匹配其他编辑器的快捷键,这样你就不需要学习新的键盘快捷键。
选择文件 > 首选项 > 从...迁移键盘快捷键 菜单以获取热门键盘映射扩展列表。市场中还有键盘映射 类别的扩展。
键盘快捷键参考
我们有一个可打印的默认键盘快捷键版本。选择 帮助 > 键盘快捷键参考 以显示一个适合打印的浓缩PDF版本,作为方便的参考。
以下链接提供对三个特定平台版本(美国英语键盘)的访问:
检测键盘快捷键冲突
如果你安装了许多扩展,或者你修改了键盘快捷键,可能会出现键盘快捷键冲突,即相同的键盘快捷键被映射到多个命令。这可能导致混淆的行为,特别是在你移动编辑器时,不同的键盘快捷键可能会在作用域内和作用域外来回变化。
右键单击键盘快捷键列表中的一个项目,并选择“显示相同的键绑定”以查看所有具有相同键盘快捷键的条目。

故障排除键盘快捷键
要排除键盘快捷键问题,您可以执行命令开发者:切换键盘快捷键排除。这将激活已派遣的键盘快捷键的日志记录并打开输出面板,显示相应的日志文件。
然后您可以按所需的键盘快捷键,并检查 VS Code 检测到的键盘快捷键以及调用的命令。
例如,当按下一个键时命令+斜杠在macOS上的代码编辑器中,日志输出将是:
[KeybindingService]: / 收到按键按下事件 - 修改键: [meta], 代码: MetaLeft, 键码: 91, 键: Meta
[KeybindingService]: | 转换后的按键按下事件 - 修改键: [meta], 代码: MetaLeft, 键码: 57 ('Meta')
[KeybindingService]: \ 键盘事件无法派发。
[KeybindingService]: / 收到按键按下事件 - 修改键: [meta], 代码: Slash, 键码: 191, 键: /
[KeybindingService]: | 转换后的按键按下事件 - 修改键: [meta], 代码: Slash, 键码: 85 ('/')
[KeybindingService]: | 解析meta+[Slash]
[KeybindingService]: \ 从2条按键绑定条目中,匹配到editor.action.commentLine,条件: editorTextFocus &&!editorReadonly,来源: built-in。
在示例日志中,第一个按键事件是用于元左键命令) 不能被派送。第二个按键事件是用于斯拉什键输入:/) 并被派遣为元+[斜线]有两个键盘快捷键条目映射自元+[斜线]匹配的那一个是用于命令编辑器操作:注释行,这有一个当条件编辑器文本焦点 &&!编辑器只读并且是一个内置的键盘快捷键入口。
查看修改的键盘快捷键
要筛选仅显示您修改的快捷键,请选择 显示用户键绑定 命令在 更多操作 (...) 菜单中。这将应用 @来源:用户 过滤到 键盘快捷键 编辑器 (源 是 'User').

高级定制
VS Code 记录了您在 中自定义的键盘快捷键keybindings.json文件。对于高级定制,你也可以直接修改keybindings.json文件。
打开keybindings.json文件:
-
打开键盘快捷键编辑器,然后选择编辑器标题栏右侧的打开键盘快捷键 (JSON)按钮。

-
或者,使用打开默认键盘快捷键 (JSON)命令在命令面板中 (⇧⌘P (Windows, Linux Ctrl+Shift+P))。
键盘规则
VS Code 中的键盘快捷键配置也被称为 键盘规则。每条规则由以下属性组成:
键:描述按下的键,例如 ⌘F(Windows, Linux Ctrl+F)。命令: 要执行的 VS Code 命令的标识符,例如工作台.视图.资源管理器打开资源管理器视图。当:(可选)包含布尔表达式的子句,根据当前上下文进行评估。
和弦(两个单独的按键操作)通过用空格分隔两个按键来描述。例如,Ctrl+K Ctrl+C.
当按下键时,应用以下评估规则:
- 规则从 底部 评估到 顶部。
- 第一个匹配的规则是
键和当条款被接受。 - 如果找到一条规则,则不再处理其他规则。
- 如果发现一条规则并且有
命令设置,命令已执行。
额外的keybindings.json规则在运行时附加到默认规则的底部,从而允许它们覆盖默认规则。keybindings.json文件被 VS Code 监控,因此在 VS Code 运行时编辑该文件将更新运行时的规则。
键盘快捷键的 dispatching 是通过分析用 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" },
// 全局键盘快捷键使用和弦(两个单独的按键动作)
{ "键": "ctrl+k enter", "命令": "工作区.操作.保留编辑器" },
{ "键": "ctrl+k ctrl+w", "命令": "工作区.操作.关闭所有编辑器" },
接受的键
该键由修饰符和键本身组成。
接受以下修饰符:
| 平台 | 修饰符 |
|---|---|
| macOS | Ctrl+,Shift+,Alt+,Cmd+ |
| Windows | Ctrl+,Shift+,Alt+,Win+ |
| Linux | Ctrl+,Shift+,Alt+,Meta+ |
接受以下按键:
- f1-f19,a-z,0-9
- `, -, =, [, ], \, ;, ', ,, ., /
- 左,上,右,下,上一页,下一页,结束,首页
- Tab,回车,退出,空格,删除键,删除
- 暂停,大写锁定,插入
- 数字小键盘0-数字小键盘9,数字小键盘乘号,数字小键盘加号,数字小键盘分隔符
- 数字键盘减号,数字键盘小数点,数字键盘除号
命令参数
您可以调用带有参数的命令。这在您经常对特定文件或文件夹执行相同操作时非常有用。您可以添加自定义键盘快捷键来执行您想要的操作。
以下是一个覆盖回车键以打印一些文本的示例:
{
"键": "输入",
"命令": "类型",
"参数": { "文本": "Hello World" },
"条件": "编辑器文本聚焦"
}
该类型命令将收到{"text": "Hello World"}作为其第一个参数,并将“Hello World”添加到文件中,而不是生成默认命令。
有关带参数命令的更多信息,请参阅内置命令。
运行多个命令
通过使用命令,可以配置键盘快捷键按顺序运行多个命令。运行命令输入:.
-
运行多个不带参数的命令:
以下示例将当前行复制下来,将当前行标记为注释,并将光标移动到复制的行。
{ "键": "ctrl+alt+c", "命令": "runCommands", "参数": { "命令列表": [ "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": "类 ${1:ClassName} {\n\t构造函数() {\n\t\t$0\n\t}\n}" } } ] } },
请注意,命令由运行命令接收值"参数"作为第一个参数。在上面的例子中,工作台.操作.文件.新建无标题文件接收{"languageId": "typescript"}作为它的第一个也是唯一一个参数。
要传递多个参数,您需要有"参数"作为数组:
{
"键": "ctrl+shift+e",
"命令": "runCommands",
"参数": {
"命令列表": [
{
// Commands被调用时带有2个参数:vscode.executeCommand("myCommand", "arg1", "arg2")
"命令": "myCommand",
"参数": ["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": ... },
...
// 要移除第二个规则,例如,在 keybindings.json 中添加:
{ "key": "tab", "command": "-jumpToNextSnippetPlaceholder" }
要通过空操作覆盖特定的键盘快捷键规则,可以指定一个空命令:
// 覆盖并禁用任何 `tab` 键盘快捷键,例如,在 keybindings.json 中添加:
{ "key": "tab", "command": "" }
键盘布局
本节仅涉及键盘快捷键,不涉及在编辑器中输入。
键是虚拟键的字符串表示,按下时并不一定与产生的字符相关。更准确地说:
- 参考: 虚拟键代码 (Windows)
- Tab 为
VK_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 会执行以下操作:
所有键盘快捷键都使用当前系统的关键字布局显示在用户界面中。例如,拆分编辑器 当使用法语(法国)键盘布局时,现在显示为 Ctrl+*:

编辑时keybindings.jsonVS Code高亮显示了误导性的键盘快捷键,这些快捷键在标准美国键盘布局下以字符表示,但在当前系统键盘布局下需要按不同标签的键。例如,以下是使用法语(法国)键盘布局时默认键盘快捷键规则的外观:

还有一个用户界面控件,可以帮助在编辑时输入键盘快捷键规则keybindings.json要启动定义快捷键控制,请按⌘K ⌘K(Windows, LinuxCtrl+K Ctrl+K)。该控制会监听按键,并在文本框中显示序列化的JSON表示,以及在下面显示VS Code在您当前的键盘布局下检测到的按键。一旦您输入了所需的按键组合,您可以按Enter,并插入一个规则片段。

在 Linux 上,VS Code 在启动时检测到您当前的键盘布局,然后缓存此信息。我们建议您在更改键盘布局时重启 VS Code。
键盘布局无关的绑定
使用扫描码,可以定义键盘快捷键,这些快捷键不会随着键盘布局的更改而更改。例如:
{ "key": "cmd+[Slash]", "command": "editor.action.commentLine", "when": "editorTextFocus" }
接受的扫描代码:
- [F1]-[F19], [KeyA]-[KeyZ], [Digit0]-[Digit9]
- [反引号], [减号], [等号], [左括号], [右括号], [反斜杠], [分号], [引号], [逗号], [句号], [斜线]
- [左箭头], [上箭头], [右箭头], [下箭头], [上翻页], [下翻页], [结束], [首页]
- [标签], [回车], [退出], [空格], [删除], [删除]
- [暂停], [大写锁定], [插入]
- [小键盘0]-[小键盘9], [小键盘乘号], [小键盘加号], [小键盘逗号]
- [小键盘减号], [小键盘小数点], [小键盘除号]
当子句上下文
VS Code 通过可选的 选项,使您能够精确控制何时启用键盘快捷键。当条款。如果您的键盘快捷键没有当条文,键盘快捷键始终在全球范围内可用。当该语句评估为 true 或 false,以启用键盘快捷键。
VS Code 根据 VS Code 用户界面中可见和活动的元素设置各种上下文键和特定值。例如,内置的开始调试命令有键盘快捷键F5,只有在有合适的调试器可用时才会启用(上下文调试器可用是真实的)并且编辑器不是在调试模式下(上下文在调试模式是假的):

你也可以直接在默认的中查看键盘快捷键的when子句keybinding.json (偏好设置:打开默认键盘快捷键 (JSON)):
{ "key": "f5", "command": "workbench.action.debug.start",
"when": "debuggersAvailable && !inDebugMode" },
条件运算符
对于当 条款条件表达式,以下条件运算符对键盘快捷键很有用:
| 操作员 | 符号 | 示例 |
|---|---|---|
| 平等 | 输入:== |
"editorLangId == typescript" |
| 不平等 | 不等于 |
"resourceExtname 不等于 .js" |
| 或者 | 输入:|| |
"是Linux"输入:||isWindows" |
| 和 | && |
"textInputFocus && !editorReadonly" |
| 比赛 | 输入:=~ |
"resourceScheme =~ /^untitled$|^file$/" |
您可以在when子句上下文参考文献中找到完整的when子句条件运算符列表。
可用上下文
您可以找到一些可用的当 条款上下文在 当条款上下文引用 中。
该列表并不完整,您可以找到其他当通过在键盘快捷键编辑器(偏好设置:打开键盘快捷键)中搜索和筛选或查看默认的来查看条款上下文keybindings.json 文件 (偏好设置:打开默认键盘快捷键 (JSON))。
自定义键盘快捷键用于重构
该编辑器操作.代码操作 命令可以让你为特定的 重构(代码操作)配置键盘快捷键。例如,下面的键盘快捷键会触发 提取函数 重构代码操作:
{
"键": "ctrl+shift+r ctrl+e",
"命令": "editor.action.codeAction",
"参数": {
"类型": "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" },
如何为特定文件类型添加键盘快捷键?
使用编辑器语言ID上下文密钥在你的当条款:
{ "key": "shift+alt+a", "command": "editor.action.blockComment",
"when": "editorTextFocus && editorLangId == csharp" },
我已修改了我的键盘快捷键keybindings.json; 他们为什么不工作?
最常见的问题是文件中的语法错误。否则,尝试移除当条款或选择不同的键不幸的是,目前这还是一个试错过程。