🚀 在 VS Code 中取得

終端機基礎知識

Visual Studio Code 包含功能完整的整合式終端機,會在您的工作區根目錄啟動。它提供與編輯器的整合,以支援諸如 連結錯誤偵測 等功能。整合式終端機能夠執行命令,例如 mkdir 和 git,就像獨立終端機一樣。

您可以依照以下方式開啟終端機

  • 從功能表中使用 [終端機] > [新增終端機] 或 [檢視] > [終端機] 功能表命令。
  • 從 [命令面板] (⇧⌘P (Windows、Linux Ctrl+Shift+P)) 中,使用 [檢視: 切換終端機] 命令。
  • 在 [檔案總管] 中,您可以使用 [在整合式終端機中開啟] 內容功能表命令,從資料夾開啟新的終端機。
  • 若要切換終端機面板,請使用 ⌃` (Windows、Linux Ctrl+`) 鍵盤快速鍵。
  • 若要建立新的終端機,請使用 ⌃⇧` (Windows、Linux Ctrl+Shift+`) 鍵盤快速鍵。

VS Code 的終端機具有稱為 Shell 整合的額外功能,可追蹤命令的執行位置,並在命令左側和捲軸中顯示裝飾

The integrated terminal can run commands such as mkdir and git just like a standalone terminal. VS Code's terminal has additional functionality called shell integration that tracks where commands are run with decorations on the left of a command and in the scrollbar.

注意: 如果您偏好在 VS Code 外部工作,請使用 ⇧⌘C (Windows、Linux Ctrl+Shift+C) 鍵盤快速鍵開啟外部終端機

終端機 Shell

整合式終端機可以使用您機器上安裝的各種 Shell,預設值會從您的系統預設值中提取。Shell 會在終端機設定檔下拉式選單中偵測並呈現。

A detected profile can be chosen in the dropdown next to the new terminal button. Some examples on Windows include PowerShell, Command Prompt, Git Bash and WSL

您可以在 終端機設定檔 文章中深入瞭解如何設定終端機 Shell。

管理終端機

終端機索引標籤 UI 位於終端機檢視的右側。每個終端機都有一個項目,其中包含其名稱、圖示、色彩和群組裝飾 (如果有的話)。

Activating the Launch Profile button will show all detected and manually configured profiles

透過選取 [終端機] 面板右上角的 [+] 圖示、從終端機下拉式選單中選取設定檔,或觸發 ⌃⇧` (Windows、Linux Ctrl+Shift+`) 命令,來新增終端機執行個體。此動作會在與該終端機相關聯的索引標籤清單中建立另一個項目。

透過將游標暫留在索引標籤上方並選取 [垃圾桶] 按鈕、選取索引標籤項目並按下 Delete 鍵、使用 [終端機: 終止作用中的終端機執行個體] 命令,或透過按一下滑鼠右鍵內容功能表,來移除終端機執行個體。

使用焦點下一個 ⇧⌘] (Windows、Linux Ctrl+PageDown) 和焦點上一個 ⇧⌘[ (Windows、Linux Ctrl+PageUp),在終端機群組之間導覽。

當終端機的狀態變更時,圖示可能會出現在索引標籤標籤上終端機標題的右側。一些範例是鈴鐺 (macOS) 和工作,在沒有錯誤時顯示核取記號,否則顯示 X。將游標暫留在圖示上方以讀取狀態資訊,其中可能包含動作。

群組 (分割窗格)

並排放置多個終端機,並透過分割終端機來建立群組

  • 將游標暫留在右側終端機清單中的項目上方,然後選取內嵌分割按鈕。
  • 按一下滑鼠右鍵內容功能表,然後選取 [分割] 功能表選項。
  • Alt 鍵並按一下索引標籤、[+] 按鈕或終端機面板上的單一索引標籤。
  • 觸發 ⌘\ (Windows、Linux Ctrl+Shift+5) 命令。

提示: 新終端機的工作目錄取決於 terminal.integrated.splitCwd 設定

透過將焦點設定在上一個窗格 ⌥⌘← (Windows、Linux Alt+Left) 或下一個窗格 ⌥⌘→ (Windows、Linux Alt+Right),在群組中的終端機之間導覽。

在清單中拖放索引標籤會重新排列它們。將索引標籤拖曳到主要終端機區域,即可將終端機從一個群組移動到另一個群組。

可以使用 [終端機: 取消分割終端機] 命令,透過命令面板或在按一下滑鼠右鍵內容功能表中,將終端機移動到其自己的群組。

編輯器區域中的終端機

您可以使用 [終端機: 在編輯器區域中建立新的終端機] 命令、[終端機: 在編輯器區域中並排建立新的終端機] 命令,或將終端機從終端機檢視拖曳到編輯器區域,在編輯器區域 (終端機編輯器) 中開啟終端機。終端機編輯器會像一般編輯器索引標籤一樣呈現

Terminal editors are presented like regular text file tabs

您可以在任一側或使用編輯器群組版面配置系統排列多個維度的終端機編輯器,例如堆疊在檔案編輯器右側的 PowerShell 和 WSL 終端機

Terminal editors are can be laid out using the editor group layout system, for example 2 terminals could sit to the right of a text editor

terminal.integrated.defaultLocation 設定可以變更預設 vieweditor 區域終端機位置。

導覽緩衝區

終端機中的內容稱為緩衝區,而底部檢視區上方區段稱為「回溯」。保留的回溯量取決於 terminal.integrated.scrollback 設定,預設值為 1000 行。

有各種命令可用於在終端機緩衝區中導覽

  • 向上捲動一行 - ⌥⌘PageUp (Windows Ctrl+Alt+PageUp、Linux Ctrl+Shift+Up)
  • 向下捲動一行 - ⌥⌘PageDown (Windows Ctrl+Alt+PageDown、Linux Ctrl+Shift+Down)
  • 向上捲動一頁 - PageUp (Windows、Linux Shift+PageUp)
  • 向下捲動一頁 - PageDown (Windows、Linux Shift+PageDown)
  • 捲動至頂端 - ⌘Home (Windows Ctrl+Home、Linux Shift+Home)
  • 捲動至底部 - ⌘End (Windows Ctrl+End、Linux Shift+End)

命令導覽也可用 (請參閱 Shell 整合)

  • 捲動至上一個命令 - ⌘↑ (Windows、Linux Ctrl+Up)
  • 捲動至下一個命令 - ⌘↓ (Windows、Linux Ctrl+Down)

捲動會立即發生,但可以使用 terminal.integrated.smoothScrolling 設定,將其設定為在短時間內動畫呈現。

終端機具有精密的連結偵測功能,可與編輯器整合,甚至擴充功能也會貢獻連結處理常式。將游標暫留在連結上方以顯示底線,然後按住 Ctrl/Cmd 鍵並按一下。

這些內建連結處理常式會依下列優先順序使用

  • URI/URL:看起來像 URI 的連結,例如 https://vscode.dev.org.twvscode://path/to/filefile://path/to/file,將使用通訊協定的標準處理常式開啟。例如,https 連結將開啟瀏覽器。

    Opening a URI link will open it in the system browser

  • 檔案連結:連結到已驗證存在於系統上的檔案。這些檔案將在新編輯器索引標籤中開啟,並支援許多常見的行/欄格式,例如 file:1:2file:line 1, column 2

    Activating a file link will open it in an editor

  • 資料夾連結:資料夾連結與檔案連結類似,但會在資料夾中開啟新的 VS Code 視窗。

    Activating a folder link will open it in a new window

  • 文字連結:備用連結類型,使用 terminal.integrated.wordSeparators 設定。此設定定義文字邊界,並將幾乎所有文字變成文字。啟動文字連結會搜尋工作區中的文字。如果只有一個結果,則會開啟,否則會呈現搜尋結果。文字連結被視為「低信賴度」,除非您按住 Ctrl/Cmd 鍵,否則不會顯示底線或工具提示。它們對行和欄尾碼的支援也有限。

    Activating a word link 'terminal:15' will open a Quick Pick searching the workspace for all files containing 'terminal', choosing an option will open the file at line 15

[開啟偵測到的連結] 命令 (⇧⌘G (Windows、Linux Ctrl+Shift+G)) 可用於透過鍵盤存取連結

Open Detected Link opens a quick pick with all links in the viewport, split into categories

提示: 如果連結驗證導致效能問題,例如在高延遲遠端環境中,請透過 terminal.integrated.enableFileLinks 設定 停用它。

擴充功能可以貢獻連結提供者,讓擴充功能定義按一下時會發生的情況。其中一個範例是 GitLens 擴充功能偵測 Git 分支連結。

When GitLens is installed, hovering a branch name will provide custom behavior to open the branch in the UI

鍵盤協助工具

連結可透過數個命令透過鍵盤存取,這些命令會根據連結類型開啟連結。

  • 終端機: 開啟最後一個本機檔案連結 - 開啟最近的本機檔案連結。沒有預設鍵盤快速鍵。
  • 終端機: 開啟最後一個 URL 連結 - 開啟最近的 URI/URL 連結。沒有預設鍵盤快速鍵。
  • 終端機: 開啟偵測到的連結... - 開啟可搜尋的快速選取區,其中包含所有偵測到的連結,包括文字連結。預設鍵盤快速鍵為 Ctrl/Cmd+Shift+O,與 [前往編輯器中的符號] 鍵盤快速鍵相同。

複製與貼上

複製和貼上的鍵盤快速鍵遵循平台標準

  • Linux:Ctrl+Shift+CCtrl+Shift+V;選取貼上可透過 Shift+Insert 取得
  • macOS:Cmd+CCmd+V
  • Windows:Ctrl+CCtrl+V

當啟用 terminal.integrated.copyOnSelection 時,複製會在選取時自動完成。

依預設,貼上多行時會出現警告,可以使用 terminal.integrated.enableMultiLinePasteWarning 設定停用。這只會在 Shell 不支援「括號貼上模式」時完成。當該模式啟用時,Shell 會指出它可以處理多行貼上。

使用滑鼠

按一下滑鼠右鍵行為

按一下滑鼠右鍵行為會因平台而異

  • Linux:顯示內容功能表。
  • macOS:選取游標下的文字並顯示內容功能表。
  • Windows:如果有的話,複製並捨棄選取範圍,否則貼上。

可以使用 terminal.integrated.rightClickBehavior 設定來設定此行為。選項如下

  • default - 顯示內容功能表。
  • copyPaste - 如果有的話,複製選取範圍,否則貼上。
  • paste - 按一下滑鼠右鍵貼上。
  • selectWord - 選取游標下的文字並顯示內容功能表。
  • nothing - 不執行任何動作,並將事件傳遞至終端機。

使用 Alt 鍵重新定位游標

Alt 鍵並按一下滑鼠左鍵會將游標重新定位到滑鼠下方。這透過模擬方向鍵筆劃來運作,這可能無法可靠地適用於某些 Shell 或程式。可以使用 terminal.integrated.altClickMovesCursor 設定停用此功能。

滑鼠事件模式

當在終端機中執行的應用程式開啟滑鼠事件模式時,例如 Vim 滑鼠模式,滑鼠互動會傳送至應用程式而不是終端機。這表示按一下和拖曳將不再建立選取範圍。可以透過在 Windows 和 Linux 上按住 Alt 鍵來強制終端機選取範圍,這也可以透過在 macOS 上按住 Option 鍵來完成,但需要先啟用 terminal.integrated.macOptionClickForcesSelection 設定。

尋找

整合式終端機具有尋找功能,可以使用 ⌘F (Windows、Linux Ctrl+F) 觸發。

Find in the terminal will highlight all text matching the query

提示: 可以透過從 要略過 Shell 的命令 中移除 workbench.action.terminal.focusFind 命令,將 Ctrl+F 傳送至 Shell。

執行選取的文字

若要使用 runSelectedText 命令,請在編輯器中選取文字,然後透過 [命令面板] (⇧⌘P (Windows、Linux Ctrl+Shift+P)) 執行 [終端機: 在作用中的終端機中執行選取的文字] 命令,終端機會嘗試執行選取的文字。如果在作用中的編輯器中未選取任何文字,則游標所在的整行將在終端機中執行。

提示: 也可以使用命令 workbench.action.terminal.runActiveFile 執行作用中的檔案。

最大化終端機

可以按一下向上箭頭圖示的最大化面板大小按鈕,來最大化終端機檢視。這會暫時隱藏編輯器並最大化面板。這對於暫時專注於大量輸出非常有用。有些開發人員會將 VS Code 當作獨立終端機使用,方法是開啟新的視窗、最大化面板並隱藏側邊欄。

請注意,只有在其 對齊 選項設定為 [置中] 時,才能最大化面板。

全選

有一個 [終端機: 全選] 命令,在 macOS 上繫結至 Cmd+A,但在 Windows 和 Linux 上沒有預設鍵盤快速鍵,因為它可能會與 Shell 熱鍵衝突。若要使用 Ctrl+A 全選,請新增此自訂鍵盤快速鍵

{
  "key": "ctrl+a",
  "command": "workbench.action.terminal.selectAll",
  "when": "terminalFocus && !isMac"
},

拖放檔案路徑

將檔案拖曳到終端機中,會將路徑輸入到終端機中,並進行逸出以符合作用中的 Shell。

使用工作自動化終端機

工作 功能可用於自動化啟動終端機,例如,下列 .vscode/tasks.json 檔案將在視窗啟動時在單一終端機群組中啟動命令提示字元和 PowerShell 終端機

{
  "version": "2.0.0",
  "presentation": {
    "echo": false,
    "reveal": "always",
    "focus": false,
    "panel": "dedicated",
    "showReuseMessage": true
  },
  "tasks": [
    {
      "label": "Create terminals",
      "dependsOn": [
        "First",
        "Second"
      ],
      // Mark as the default build task so cmd/ctrl+shift+b will create them
      "group": {
        "kind": "build",
        "isDefault": true
      },
      // Try start the task on folder open
      "runOptions": {
        "runOn": "folderOpen"
      }
    },
    {
      // The name that shows up in terminal tab
      "label": "First",
      // The task will launch a shell
      "type": "shell",
      "command": "",
      // Set the shell type
      "options": {
        "shell": {
          "executable": "cmd.exe",
          "args": []
        }
      },
      // Mark as a background task to avoid the spinner animation on the terminal tab
      "isBackground": true,
      "problemMatcher": [],
      // Create the tasks in a terminal group
      "presentation": {
        "group": "my-group"
      }
    },
    {
      "label": "Second",
      "type": "shell",
      "command": "",
      "options": {
        "shell": {
          "executable": "pwsh.exe",
          "args": []
        }
      },
      "isBackground": true,
      "problemMatcher": [],
      "presentation": {
        "group": "my-group"
      }
    }
  ]
}

此檔案可以認可至存放庫,以與其他開發人員共用,或透過 workbench.action.tasks.openUserTasks 命令建立為使用者工作。

工作目錄

依預設,終端機會在檔案總管中開啟的資料夾中開啟。terminal.integrated.cwd 設定允許指定要開啟的自訂路徑

{
  "terminal.integrated.cwd": "/home/user"
}

Windows 上的分割終端機將在父終端機啟動時的目錄中啟動。在 macOS 和 Linux 上,分割終端機將繼承父終端機的目前工作目錄。可以使用 terminal.integrated.splitCwd 設定變更此行為

{
  "terminal.integrated.splitCwd": "workspaceRoot"
}

也有擴充功能可用,可提供更多選項,例如 Terminal Here

固定尺寸終端機

[終端機: 設定固定尺寸] 命令允許變更終端機及其後端虛擬終端機使用的欄數和列數。這會在必要時新增捲軸,這可能會導致不愉快的 UX,而且通常不建議使用,但特別是在 Windows 上,對於在分頁工具不可用時讀取記錄或長行是很常見的需求。

您也可以在終端機索引標籤上按一下滑鼠右鍵,然後選取 [將大小切換為內容寬度] (⌥Z (Windows、Linux Alt+Z)),將終端機欄數調整為終端機中最大換行的行。

下一步

本文件已涵蓋終端機的基礎知識。請繼續閱讀以瞭解更多關於

  • 終端機內嵌聊天 - 由 AI 驅動的建議直接在您的終端機中。
  • 工作 - 工作可讓您與外部工具整合並大量利用終端機。
  • 精通 VS Code 的終端機 - 一個外部部落格,其中包含許多適用於終端機的進階使用者提示。
  • 透過瀏覽 VS Code 中的鍵盤快速鍵 (喜好設定: 開啟鍵盤快速鍵,然後搜尋「終端機」) 來探索終端機命令。

常見問題

我啟動終端機時遇到問題

針對這些類型的問題,有一個 專用的疑難排解指南

如何建立系統管理員終端機?

整合式終端機 Shell 是以 VS Code 的權限執行的。如果您需要以提升的 (系統管理員) 或不同的權限執行 Shell 命令,請使用平台公用程式,例如終端機中的 runas.exe

您可以在 設定設定檔 中深入瞭解如何透過終端機設定檔自訂終端機。

我可以為檔案總管的 [在整合式終端機中開啟] 命令新增鍵盤快速鍵嗎?

您可以透過 [在整合式終端機中開啟] 內容功能表命令,為檔案總管中的特定資料夾開啟新的終端機。

A folder selected in the Explorer displaying the context menu with the Open in Integrated Terminal command

依預設,沒有與 [在整合式終端機中開啟] 相關聯的鍵盤快速鍵,但您可以透過 [鍵盤快速鍵編輯器] (⌘K ⌘S (Windows、Linux Ctrl+K Ctrl+S)) 新增您自己的鍵盤快速鍵,將鍵盤快速鍵新增至您的 keybindings.json

以下 keybindings.json 範例為 openInTerminal 新增了鍵盤快速鍵 Ctrl+T

{
  "key": "ctrl+t",
  "command": "openInTerminal",
  "when": "filesExplorerFocus"
}

為什麼在啟動整合式終端機時,nvm 會抱怨前置詞選項?

nvm (Node Version Manager) 使用者通常第一次在 VS Code 的整合式終端機中看到此錯誤

nvm is not compatible with the npm config "prefix" option: currently set to "/usr/local"
Run `npm config delete prefix` or `nvm use --delete-prefix v8.9.1 --silent` to unset it

這主要是 macOS 問題,不會在外部終端機中發生。造成此問題的常見原因如下

  • npm 是使用另一個 node 執行個體全域安裝的,該執行個體位於您的路徑中的某個位置 (例如 /usr/local/bin/npm)。
  • 為了在 $PATH 上取得開發工具,VS Code 會在啟動時啟動 bash 登入 Shell。這表示您的 ~/.bash_profile 已執行,而且當整合式終端機啟動時,它會執行另一個登入 Shell,可能會以非預期的方式重新排序 $PATH

若要解決此問題,您需要追蹤舊版 npm 的安裝位置,並移除它及其過時的 node_modules。尋找 nvm 初始化指令碼,並在執行之前執行 which npm,這應該會在您啟動新終端機時列印路徑。

取得 npm 的路徑後,透過執行類似以下的命令來解析符號連結,尋找舊的 node_modules

ls -la /usr/local/bin | grep "np[mx]"

這會在結尾處提供您已解析的路徑

... npm -> ../lib/node_modules/npm/bin/npm-cli.js
... npx -> ../lib/node_modules/npm/bin/npx-cli.js

從那裡移除檔案並重新啟動 VS Code 應該可以修正此問題

rm /usr/local/bin/npm /usr/local/lib/node_modules/npm/bin/npm-cli.js
rm /usr/local/bin/npx /usr/local/lib/node_modules/npm/bin/npx-cli.js

為什麼 macOS 在我調整終端機分割窗格大小時會發出叮咚聲?

鍵盤快速鍵 ⌃⌘← 和 ⌃⌘→ 是調整終端機中個別分割窗格大小的預設值。雖然它們可以運作,但由於 Chromium 中的問題,它們也會導致系統播放「無效金鑰」聲音。建議的因應措施是告訴 macOS 針對這些鍵盤快速鍵執行無操作,方法是在終端機中執行此命令

mkdir -p ~/Library/KeyBindings
cat > ~/Library/KeyBindings/DefaultKeyBinding.dict <<EOF
{
  "^@\UF701" = "noop";
  "^@\UF702" = "noop";
  "^@\UF703" = "noop";
}
EOF

我的終端機轉譯發生問題。我可以做什麼?

依預設,整合式終端機將在大多數機器上使用 GPU 加速進行轉譯。通常,當發生轉譯問題時,這是您的硬體/作業系統/驅動程式中的某些項目無法與 GPU 轉譯器正常運作的問題。首先要嘗試的是停用 GPU 加速,以 DOM 型轉譯來換取轉譯速度,DOM 型轉譯更可靠

{
  "terminal.integrated.gpuAcceleration": "off"
}

如需詳細資訊,請參閱 GPU 加速 章節。

當我貼上內容時,我看到 1~[201~

這通常表示終端機內運行的程式/shell 要求啟用「括號貼上模式」,但某些環節可能不正確地支援此模式。 為了繞過這個問題,您可以執行 printf "\e[?2004l" 以便在當前工作階段停用它,或將以下內容新增至您的 ~/.inputrc 檔案。

set enable-bracketed-paste off

或者,可以強制括號貼上模式忽略 shell 的請求,透過關閉此設定來達成。

{
  "terminal.integrated.ignoreBracketedPasteMode": true
}

在 zsh 上,Ctrl+A、Ctrl+R 輸出 ^A、^R

如果 zsh 由於在您的初始化腳本中將 $EDITOR$VISUAL 設定為 vi/vim 而處於 Vim 模式而非 Emacs 模式,則可能會發生這種情況。

為了繞過這個問題,您有兩個選項:

  • 確保您未將 $EDITOR 設定為 vi(m)。 但是,如果您希望您的 Git 編輯器正常運作,這就不是一個選項。
  • bindkey -e 新增至您的初始化腳本以明確設定 Emacs。

如何設定 Cmd+. 以對應到像 macOS 內建終端機那樣的 Ctrl+C?

macOS 預設終端機使用 Cmd+. 來執行與 Ctrl+C 相同的功能。 若要在 VS Code 中獲得此行為,請新增這個自訂鍵盤快捷鍵

{
  "key": "cmd+.",
  "command": "workbench.action.terminal.sendSequence",
  "when": "terminalFocus",
  "args": { "text": "\u0003" }
}

為什麼終端機中的顏色不正確?

我們預設啟用的一項輔助功能是確保前景文字的最低對比度至少達到 4.5。 此功能確保文字在任何 shell 和主題下都可讀,否則這是無法實現的。 若要停用此功能,您可以設定:

"terminal.integrated.minimumContrastRatio": 1

請參閱最低對比度章節以取得更多資訊。