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。變更鍵盤快速鍵的對話方塊會根據您的鍵盤配置指派正確且所需的鍵盤快速鍵。

自訂使用者介面動作的快速鍵

若要自訂使用者介面動作的鍵盤快速鍵,請在工作台中任何動作項目上按一下右鍵,然後選取設定按鍵繫結。這將開啟「鍵盤快速鍵編輯器」,並篩選到對應的命令。如果動作有 `when` 子句,它會自動包含在內,讓您更容易設定所需的鍵盤快速鍵。

按鍵對應擴充功能

按鍵對應擴充功能會修改 VS Code 快速鍵以符合其他編輯器的快速鍵,因此您無需學習新的鍵盤快速鍵。

選取 檔案 > 喜好設定 > 從...移轉鍵盤快速鍵 功能表以取得熱門按鍵對應擴充功能的清單。市集裡也有一個 按鍵對應類別 的擴充功能。

鍵盤快速鍵參考

我們有預設鍵盤快速鍵的可列印版本。選取說明 > 鍵盤快速鍵參考 以顯示精簡的 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.

在範例記錄中,第一個按鍵按下事件是針對 MetaLeft 鍵 (cmd),無法分派。第二個按鍵按下事件是針對 Slash 鍵 (/),並分派為 meta+[Slash]。有兩個鍵盤快速鍵項目從 meta+[Slash] 對應,其中一個匹配的是命令 editor.action.commentLine,它具有 when 條件 editorTextFocus && !editorReadonly,並且是一個內建的鍵盤快速鍵項目。

檢視已修改的鍵盤快速鍵

若要篩選清單以僅顯示您已修改的快速鍵,請在更多動作 (...) 功能表中選取顯示使用者按鍵繫結命令。這會將 @source:user 篩選器套用到鍵盤快速鍵編輯器 (來源為「使用者」)。

Default Keyboard Shortcuts

進階自訂

VS Code 會在 keybindings.json 檔案中追蹤您已自訂的鍵盤快速鍵。為了進行進階自訂,您也可以直接修改 keybindings.json 檔案。

若要開啟 keybindings.json 檔案

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

    Open Keyboard Shortcuts JSON button

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

鍵盤規則

VS Code 中的鍵盤快速鍵設定也稱為「鍵盤規則」。每個規則包含以下屬性

  • key:描述按下的按鍵,例如 ⌘F (Windows、Linux Ctrl+F)
  • command:要執行的 VS Code 命令識別碼,例如 workbench.view.explorer 用於開啟「總管」檢視。
  • when:(選用) 子句,包含根據目前內容評估的布林運算式。

組合鍵 (兩個獨立的按鍵動作) 透過用空格分隔兩個按鍵動作來描述。例如,Ctrl+K Ctrl+C

按下按鍵時,會套用以下評估規則

  • 規則由**下**往**上**評估。
  • 第一個同時符合 `key` 和 `when` 子句的規則將被接受。
  • 如果找到規則,則不再處理其他規則。
  • 如果找到規則且設定了 `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-f19a-z0-9
  • `, -, =, [, ], \, ;, ', ,, ., /
  • leftuprightdownpageuppagedownendhome
  • tabenterescapespacebackspacedelete
  • pausebreakcapslockinsert
  • numpad0-numpad9numpad_multiplynumpad_addnumpad_separator
  • numpad_subtractnumpad_decimalnumpad_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 中。例如,當使用法文 (法國) 鍵盤配置時,分割編輯器現在會顯示為 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` 子句評估為真或假以啟用鍵盤快速鍵。

VS Code 根據 VS Code UI 中可見和作用中的元素設定各種內容鍵和特定值。例如,內建的啟動偵錯命令的鍵盤快速鍵是 F5,僅在有適當的偵錯工具可用 (內容 debuggersAvailable 為 true) 且編輯器不在偵錯模式中 (內容 inDebugMode 為 false) 時啟用

Start Debugging when clause in the Keyboard Shorts editor

您也可以直接在預設 keybinding.json 中檢視鍵盤快速鍵的 `when` 子句 (喜好設定:開啟預設鍵盤快速鍵 (JSON))

{ "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.