現已釋出!閱讀關於 11 月新增功能和修復的內容。

Visual Studio Code 的鍵盤快捷鍵

Visual Studio Code 允許您直接從鍵盤執行大多數任務。本文介紹如何修改 VS Code 隨附的預設鍵盤快捷鍵。

注意

如果您在 Mac 上訪問此頁面,您將看到 Mac 的鍵盤快捷鍵。如果您使用 Windows 或 Linux 訪問,您將看到該平臺的按鍵。如果您需要其他平臺的鍵盤快捷鍵,請將滑鼠懸停在您感興趣的按鍵上。

鍵盤快捷方式編輯器

VS Code 透過“鍵盤快捷鍵”編輯器提供豐富的鍵盤快捷鍵編輯體驗。該編輯器列出了所有可用命令(包括有和沒有鍵盤快捷鍵的),並允許您使用可用操作更改、刪除或重置它們的鍵盤快捷鍵。要查詢命令或鍵盤快捷鍵,請使用搜索框並輸入命令或快捷鍵來篩選列表。

要開啟“鍵盤快捷鍵”編輯器,請選擇 檔案 > 首選項 > 鍵盤快捷鍵選單,或在命令面板中使用首選項: 開啟鍵盤快捷鍵命令(⌘K ⌘S (Windows、Linux Ctrl+K Ctrl+S))。

Keyboard Shortcuts

注意

鍵盤快捷鍵與您當前的鍵盤佈局匹配。例如,在美式鍵盤佈局中,鍵盤快捷鍵 Cmd+\ 在佈局更改為德語時將顯示為 Ctrl+Shift+Alt+Cmd+7。更改鍵盤快捷鍵的對話方塊會根據您的鍵盤佈局分配正確的、您想要的鍵盤快捷鍵。

自定義 UI 操作的快捷鍵

要自定義 UI 操作的鍵盤快捷鍵,請右鍵單擊工作區中的任何操作項,然後選擇配置按鍵繫結。這將開啟“鍵盤快捷鍵”編輯器,並篩選到相應的命令。如果操作具有 when 子句,它將被自動包含,從而更容易按照您需要的方式設定鍵盤快捷鍵。

鍵盤對映擴充套件

鍵盤對映擴充套件會修改 VS Code 的快捷鍵以匹配其他編輯器的快捷鍵,這樣您就不需要學習新的鍵盤快捷鍵。

選擇 檔案 > 首選項 > 從...遷移鍵盤快捷鍵選單,即可獲得常用鍵盤對映擴充套件的列表。在 Marketplace 中還有一個擴充套件的鍵盤對映類別

鍵盤快捷鍵參考

我們有一個可列印的預設鍵盤快捷鍵版本。選擇幫助 > 鍵盤快捷鍵參考以顯示適合列印的精簡 PDF 版本,方便參考。

以下連結提供了對三個特定於平臺的版本(美式英語鍵盤)的訪問許可權

檢測鍵盤快捷鍵衝突

如果您安裝了許多擴充套件,或者您修改了自己的鍵盤快捷鍵,可能會出現鍵盤快捷鍵衝突,即同一個鍵盤快捷鍵被對映到多個命令。這可能導致令人困惑的行為,特別是當不同的鍵盤快捷鍵在編輯器中移動時出現和消失。

右鍵單擊鍵盤快捷鍵列表中的某一項,然後選擇顯示相同的按鍵繫結,以檢視所有具有相同鍵盤快捷鍵的條目。

show keyboard shortcut conflicts menu

排查鍵盤快捷鍵問題

要排查鍵盤快捷鍵問題,您可以執行開發人員: 切換鍵盤快捷鍵故障排除命令。這將啟用已分派鍵盤快捷鍵的日誌記錄,並開啟“輸出”面板及其對應的日誌檔案。

然後,您可以按下您想要的鍵盤快捷鍵,並檢查 VS Code 檢測到的鍵盤快捷鍵以及呼叫的命令。

例如,在 macOS 的程式碼編輯器中按下 cmd+/ 時,日誌輸出將是

[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.

在示例日誌中,第一個 keydown 事件是 MetaLeft 鍵(cmd),無法分派。第二個 keydown 事件是 Slash 鍵(/),並被分派為 meta+[Slash]。有兩個從 meta+[Slash] 對映的鍵盤快捷鍵條目,匹配的是 editor.action.commentLine 命令,該命令具有 when 條件 editorTextFocus && !editorReadonly,並且是內建鍵盤快捷鍵條目。

檢視已修改的鍵盤快捷鍵

要將列表篩選為僅顯示您修改過的快捷鍵,請在更多操作...)選單中選擇顯示使用者按鍵繫結命令。這會將 @source:user 過濾器應用於鍵盤快捷鍵編輯器(Source 為“User”)。

Default Keyboard Shortcuts

高階自定義

VS Code 會在 keybindings.json 檔案中跟蹤您自定義的鍵盤快捷鍵。對於高階自定義,您也可以直接修改 keybindings.json 檔案。

要開啟 keybindings.json 檔案

  • 開啟鍵盤快捷鍵編輯器,然後選擇編輯器標題欄右側的開啟鍵盤快捷鍵(JSON)按鈕。

    Open Keyboard Shortcuts JSON button

  • 或者,在命令面板中(⇧⌘P (Windows、Linux Ctrl+Shift+P))使用開啟預設鍵盤快捷鍵(JSON)命令。

鍵盤規則

VS Code 中的鍵盤快捷鍵配置也稱為鍵盤規則。每條規則由以下屬性組成

  • key:描述按下的按鍵,例如 ⌘F (Windows、Linux Ctrl+F)
  • command:要執行的 VS Code 命令的識別符號,例如 workbench.view.explorer 以開啟“資源管理器”檢視。
  • when:(可選) 包含一個布林表示式的子句,該表示式根據當前上下文進行評估。

和絃(兩次單獨的按鍵操作)透過在兩個按鍵之間新增空格來描述。例如,Ctrl+K Ctrl+C

當按下按鍵時,將應用以下評估規則

  • 規則從下方上方進行評估。
  • 第一個同時匹配 keywhen 子句的規則將被接受。
  • 如果找到規則,則不再處理其他規則。
  • 如果找到規則且其 command 已設定,則執行 command

附加的 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" },

接受的鍵

key 由修飾鍵和按鍵本身組成。

接受以下修飾鍵

平臺 修飾鍵
macOS Ctrl+, Shift+, Alt+, Cmd+
Windows Ctrl+, Shift+, Alt+, Win+
Linux Ctrl+, Shift+, Alt+, Meta+

接受以下按鍵

  • f1-f19, a-z, 0-9
  • `, -, =, [, ], \, ;, ', ,, ., /
  • left, up, right, down, pageup, pagedown, end, home
  • tab, enter, escape, space, backspace, delete
  • pausebreak, capslock, insert
  • 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"
}

type 命令將接收 {"text": "Hello World"} 作為其第一個引數,並在檔案中新增“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 檔案刪除鍵盤快捷鍵,請在 command 前新增 -,該規則將成為刪除規則。

這是一個例子

// 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)
  • 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 會執行以下操作

所有鍵盤快捷鍵都使用當前系統的鍵盤佈局在 UI 中呈現。例如,在使用法語(法國)鍵盤佈局時,Split Editor 現在顯示為 Ctrl+*

render keyboard shortcut

在編輯 keybindings.json 時,VS Code 會突出顯示誤導性的鍵盤快捷鍵,即在檔案中使用標準美式鍵盤佈局下生成的字元表示的快捷鍵,但需要在當前系統鍵盤佈局下按下具有不同標籤的按鍵。例如,當使用法語(法國)鍵盤佈局時,預設鍵盤快捷鍵規則的外觀如下

keybindings.json guidance

在編輯 keybindings.json 時,還有一個 UI 控制元件可以幫助輸入鍵盤快捷鍵規則。要啟動定義按鍵繫結控制元件,請按 ⌘K ⌘K (Windows、Linux Ctrl+K Ctrl+K)。該控制元件會監聽按鍵,並在文字框中呈現序列化的 JSON 表示形式,並在其下方顯示 VS Code 在您當前鍵盤佈局下檢測到的按鍵。一旦輸入了您想要的按鍵組合,就可以按 Enter 插入一個規則片段。

keyboard shortcut widget

注意

在 Linux 上,VS Code 會在啟動時檢測您當前的鍵盤佈局,然後快取此資訊。建議您在更改鍵盤佈局時重新啟動 VS Code。

與鍵盤佈局無關的繫結

使用掃描碼,可以定義不隨鍵盤佈局更改而改變的鍵盤快捷鍵。例如

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

接受的掃描碼

  • [F1]-[F19], [KeyA]-[KeyZ], [Digit0]-[Digit9]
  • [Backquote], [Minus], [Equal], [BracketLeft], [BracketRight], [Backslash], [Semicolon], [Quote], [Comma], [Period], [Slash]
  • [ArrowLeft], [ArrowUp], [ArrowRight], [ArrowDown], [PageUp], [PageDown], [End], [Home]
  • [Tab], [Enter], [Escape], [Space], [Backspace], [Delete]
  • [Pause], [CapsLock], [Insert]
  • [Numpad0]-[Numpad9], [NumpadMultiply], [NumpadAdd], [NumpadComma]
  • [NumpadSubtract], [NumpadDecimal], [NumpadDivide]

when 子句上下文

VS Code 透過可選的 when 子句為您提供了何時啟用鍵盤快捷鍵的精確控制。如果您的鍵盤快捷鍵沒有 when 子句,則鍵盤快捷鍵始終全域性可用。when 子句的計算結果為 true 或 false,用於啟用鍵盤快捷鍵。

VS Code 會根據 VS Code UI 中可見和活動的元素設定各種上下文鍵和特定值。例如,內建的開始除錯命令的鍵盤快捷鍵是 F5,僅當存在合適的偵錯程式(上下文 debuggersAvailable 為 true)且編輯器不在除錯模式下(上下文 inDebugMode 為 false)時才啟用。

Start Debugging when clause in the Keyboard Shorts editor

您也可以直接在預設的 keybinding.json首選項: 開啟預設鍵盤快捷鍵 (JSON))中檢視鍵盤快捷鍵的 when 子句。

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

條件運算子

對於 when 子句條件表示式,以下條件運算子對於鍵盤快捷鍵很有用

運算子 符號 示例
相等 == "editorLangId == typescript"
不等 != "resourceExtname != .js"
|| "isLinux||isWindows"
&& "textInputFocus && !editorReadonly"
匹配 =~ "resourceScheme =~ /^untitled$|^file$/"

您可以在when 子句上下文參考中找到 when 子句條件運算子的完整列表。

可用上下文

您可以在when 子句上下文參考中找到一些可用的 when 子句上下文。

那裡的列表並非詳盡無遺,您可以透過在“鍵盤快捷鍵”編輯器(首選項: 開啟鍵盤快捷鍵)中搜索和篩選,或檢視預設的 keybindings.json 檔案(首選項: 開啟預設鍵盤快捷鍵 (JSON))來找到其他 when 子句上下文。

重構的自定義鍵盤快捷鍵

editor.action.codeAction 命令允許您配置特定重構(程式碼操作)的鍵盤快捷鍵。例如,下面的鍵盤快捷鍵將觸發提取函式重構程式碼操作。

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

這在重構文章中有詳細介紹,您可以在其中瞭解不同型別的程式碼操作以及如何在有多個可能的重構時對其進行優先順序排序。

常見問題

如何查詢繫結到特定按鍵的命令?

在“鍵盤快捷鍵”編輯器中,您可以按特定按鍵進行篩選,以檢視哪些命令繫結到哪些按鍵。在下面的螢幕截圖中,您可以看到 Ctrl+Shift+P 繫結到顯示所有命令以調出命令面板。

Keyboard shortcuts quick outline

如何為操作新增鍵盤快捷鍵,例如,新增 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" },

如何為特定檔案型別新增鍵盤快捷鍵?

when 子句中使用 editorLangId 上下文鍵

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

我在 keybindings.json 中修改了鍵盤快捷鍵;為什麼它們不起作用?

最常見的問題是檔案中的語法錯誤。否則,嘗試刪除 when 子句或選擇不同的 key。不幸的是,此時,這是一個試錯過程。

© . This site is unofficial and not affiliated with Microsoft.