終端基礎
Visual Studio Code 包含一個功能齊全的整合終端,該終端在工作區的根目錄下啟動。它與編輯器整合,以支援連結和錯誤檢測等功能。整合終端可以像獨立終端一樣執行 mkdir 和 git 等命令。
你可以透過以下方式開啟終端:
- 從選單欄使用 終端 > 新建終端 或 檢視 > 終端 選單命令。
- 在命令面板 (⇧⌘P (Windows, Linux Ctrl+Shift+P)) 中,使用 檢視:切換終端 命令。
- 在資源管理器中,你可以使用 在整合終端中開啟 上下文選單命令從資料夾開啟一個新終端。
- 要切換終端面板,請使用 ⌃` (Windows, Linux Ctrl+`) 鍵盤快捷鍵。
- 要建立一個新終端,請使用 ⌃⇧` (Windows, Linux Ctrl+Shift+`) 鍵盤快捷鍵。
VS Code 的終端有一個名為“Shell 整合”的附加功能,它透過命令左側和捲軸中的裝飾來跟蹤命令的執行位置。
注意: 如果你喜歡在 VS Code 之外工作,可以使用 ⇧⌘C (Windows, Linux Ctrl+Shift+C) 鍵盤快捷鍵開啟一個外部終端。
終端 Shell
整合終端可以使用你機器上安裝的各種 Shell,預設 Shell 從你的系統預設設定中獲取。Shell 會被檢測並顯示在終端配置檔案的下拉列表中。
你可以在終端配置檔案一文中瞭解更多關於配置終端 Shell 的資訊。
管理終端
終端選項卡使用者介面位於終端檢視的右側。每個終端都有一個條目,包含其名稱、圖示、顏色和分組裝飾(如果有)。
透過選擇終端面板右上角的 + 圖示、從終端下拉列表中選擇一個配置檔案,或觸發 ⌃⇧` (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) 在一個分組內的終端之間導航。
在列表中拖放選項卡可以重新排列它們。將一個選項卡拖到主終端區域可以將一個終端從一個分組移動到另一個分組。
透過命令面板或右鍵上下文選單中的 終端:取消拆分終端 命令,可以將一個終端移動到其自己的分組中。
編輯器區域中的終端
你可以使用 終端:在編輯器區域建立新終端 命令、終端:在編輯器區域側邊建立新終端 命令,或透過將終端從終端檢視拖動到編輯器區域,在編輯器區域開啟終端(終端編輯器)。終端編輯器像常規編輯器選項卡一樣呈現。
你可以使用編輯器分組佈局系統,將終端編輯器放在任一側或以多維度排列,例如,將 PowerShell 和 WSL 終端堆疊在檔案編輯器的右側。
terminal.integrated.defaultLocation 設定可以更改預設的終端位置為 view
(檢視)或 editor
(編輯器)區域。
新視窗中的終端
有幾種不同的方法可以在新視窗中開啟終端:
- 使用 ⌃⇧⌥` (Windows, Linux Ctrl+Shift+Alt+`)
- 如果你有多個終端,右鍵單擊終端選項卡;如果只打開了一個終端,則左鍵單擊該選項卡。然後選擇 將終端移動到新視窗。
- 選擇在多個不同選單中可用的 新建終端視窗 條目。
導航緩衝區
終端中的內容稱為緩衝區,底部視口正上方的部分稱為“回滾”。保留的回滾量由 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.com.tw
、vscode://path/to/file
或file://path/to/file
,將使用該協議的標準處理程式開啟。例如,https
連結將開啟瀏覽器。 -
檔案連結:指向已驗證存在於系統上的檔案的連結。這些連結將在新的編輯器選項卡中開啟檔案,並支援許多常見的行/列格式,例如
file:1:2
、file:line 1, column 2
。 -
資料夾連結:與檔案連結類似,但會在該資料夾處開啟一個新的 VS Code 視窗。
-
單詞連結:後備連結型別,使用 terminal.integrated.wordSeparators 設定。該設定定義了單詞邊界,使幾乎所有文字都成為單詞。啟用單詞連結會在工作區中搜索該單詞。如果只有一個結果,它將開啟;否則,它將呈現搜尋結果。單詞連結被認為是“低置信度”的,除非你按住 Ctrl/Cmd 鍵,否則不會顯示下劃線或工具提示。它們對行和列字尾的支援也有限。
開啟檢測到的連結命令 (⇧⌘O (Windows, Linux Ctrl+Shift+O)) 可用於透過鍵盤訪問連結。
提示: 如果連結驗證導致效能問題(例如在高延遲的遠端環境中),請透過 terminal.integrated.enableFileLinks 設定 停用它。
處理連結的擴充套件
擴充套件可以貢獻連結提供程式,這允許擴充套件定義點選時發生的事情。一個例子是 GitLens 擴充套件檢測 Git 分支連結。
鍵盤可訪問性
通過幾個根據連結型別開啟連結的命令,可以從鍵盤訪問連結。
- 終端:開啟上一個本地檔案連結 - 開啟最近的本地檔案連結。沒有預設鍵盤快捷鍵。
- 終端:開啟上一個 URL 連結 - 開啟最近的 URI/URL 連結。沒有預設鍵盤快捷鍵。
- 終端:開啟檢測到的連結... - 開啟一個可搜尋的快速選擇框,其中包含所有檢測到的連結,包括單詞連結。預設鍵盤快捷鍵是 Ctrl/Cmd+Shift+O,與轉到編輯器中的符號鍵盤快捷鍵相同。
複製和貼上
複製和貼上的鍵盤快捷鍵遵循平臺標準:
- Linux:Ctrl+Shift+C 和 Ctrl+Shift+V;使用 Shift+Insert 可進行選中貼上。
- macOS:Cmd+C 和 Cmd+V
- Windows:Ctrl+C 和 Ctrl+V
當啟用 terminal.integrated.copyOnSelection 時,選擇時會自動複製。
預設情況下,貼上多行時會有警告,可以透過 terminal.integrated.enableMultiLinePasteWarning 設定停用。這僅在 Shell 不支援“括號貼上模式”時才會發生。當該模式啟用時,Shell 表示它可以處理多行貼上。
使用滑鼠
右鍵單擊行為
右鍵單擊的行為因平臺而異:
- Linux:顯示上下文選單。
- macOS:選擇游標下的單詞並顯示上下文選單。
- Windows:如果有選區,則複製並放下選區,否則貼上。
這可以使用 terminal.integrated.rightClickBehavior 設定進行配置。選項有:
default
- 顯示上下文選單。copyPaste
- 當有選區時複製,否則貼上。paste
- 右鍵單擊時貼上。selectWord
- 選擇游標下的單詞並顯示上下文選單。nothing
- 不做任何操作,並將事件傳遞給終端。
列選擇
按住 Alt 並用滑鼠左鍵拖動,可以在終端內選擇一個矩形文字區域,而不是常規的按行選擇。
使用 Alt 重新定位游標
按住 Alt 並單擊滑鼠左鍵,會將游標重新定位到滑鼠下方。這是透過模擬箭頭按鍵實現的,可能對某些 Shell 或程式不起作用。此功能可以透過 terminal.integrated.altClickMovesCursor 設定停用。
滑鼠事件模式
當終端中執行的應用程式(如 Vim 滑鼠模式)開啟滑鼠事件模式時,滑鼠互動會被髮送到應用程式而不是終端。這意味著單擊和拖動將不再建立選區。可以透過在 Windows 和 Linux 上按住 Alt 鍵來強制進行終端選擇,在 macOS 上也可以使用 Option 鍵,但這需要先啟用 terminal.integrated.macOptionClickForcesSelection 設定。
查詢
整合終端具有查詢功能,可以透過 ⌘F (Windows, Linux Ctrl+F) 觸發。
提示: 透過從要跳過 Shell 的命令中移除
workbench.action.terminal.focusFind
命令,可以將 Ctrl+F 傳送到 Shell。
執行選定的文字
要使用 runSelectedText
命令,請在編輯器中選擇文字,然後透過命令面板 (⇧⌘P (Windows, Linux Ctrl+Shift+P)) 執行 終端:在活動終端中執行選定的文字 命令,終端將嘗試執行所選文字。如果活動編輯器中沒有選擇文字,則游標所在行的整行將在終端中執行。
提示: 也可以使用
workbench.action.terminal.runActiveFile
命令執行活動檔案。
最大化終端
可以透過點選帶有向上 V 形圖示的最大化面板尺寸按鈕來最大化終端檢視。這將暫時隱藏編輯器並最大化面板。這對於臨時關注大量輸出非常有用。一些開發者透過開啟新視窗、最大化面板並隱藏側邊欄,將 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。
固定尺寸終端
終端:設定固定尺寸 命令允許更改終端及其後端偽終端使用的列數和行數。這將在必要時新增捲軸,可能會導致不佳的使用者體驗,並且通常不推薦,但這是 Windows 上特別常見的需求,用於在分頁工具不可用時讀取日誌或長行。
你也可以右鍵單擊終端選項卡並選擇 切換大小以適應內容寬度 (⌥Z (Windows, Linux Alt+Z)) 來將終端列數調整為終端中最長的換行行。
終端中的 GitHub Copilot
如果你有權訪問 GitHub Copilot,你可以使用它來獲得關於終端命令和 Shell 指令碼的 AI 輔助。有幾種使用 Copilot 的方式:
終端內聯聊天
直接在終端中啟動內聯聊天,以獲取有關 Shell 命令的幫助:
- 開啟終端 (⌃` (Windows, Linux Ctrl+`))
- 按 ⌘I (Windows, Linux Ctrl+I) 或從命令面板執行 終端內聯聊天 命令。
- 用自然語言輸入你的問題或請求,例如:
- “如何找到這個目錄中最大的檔案?”
- “告訴我如何撤銷上一次 git 提交”
- “建立一個 bash 指令碼來分析日誌檔案”
當 Copilot 提供響應時,你可以選擇 執行 直接執行命令,或選擇 插入 將其新增到終端以進行進一步編輯。
有關在終端中使用 GitHub Copilot 的更多資訊,請參閱使用終端內聯聊天。
終端聊天參與者
在聊天檢視的提問模式中使用專用的 @terminal
聊天參與者:
- 開啟聊天檢視 (⌃⌘I (Windows, Linux Ctrl+Alt+I))
- 以
@terminal
開始你的問題,將其定向到終端參與者。 - 詢問有關終端命令、Shell 指令碼或解釋終端輸出的問題。
示例
@terminal 列出此工作區中最大的 5 個檔案
@terminal /explain top shell 命令
@terminal 如何遞迴地 grep 模式
在聊天中引用終端上下文
你可以在聊天提示中包含終端資訊作為上下文:
- 使用
#terminalSelection
將終端中選定的文字新增到你的聊天提示中。 - 使用
#terminalLastCommand
包含你在終端中執行的最後一個命令。
後續步驟
本文件已涵蓋了終端的基礎知識。請繼續閱讀以瞭解更多資訊:
- 終端內聯聊天 - 直接在你的終端中獲得 AI 驅動的建議。
- 任務 - 任務讓你與外部工具整合並大量利用終端。
- 精通 VS Code 的終端 - 一個外部部落格,提供了大量終端的高階使用者技巧。
- 透過瀏覽 VS Code 中的鍵盤快捷鍵(首選項:開啟鍵盤快捷鍵,然後搜尋“terminal”)來探索終端命令。
常見問題
我無法啟動終端
有一個專門的故障排除指南來解決這類問題。
如何建立一個管理員終端?
整合終端 Shell 是以 VS Code 的許可權執行的。如果你需要以提升的(管理員)或不同的許可權執行 Shell 命令,請在終端內使用平臺實用程式,例如 runas.exe
。
你可以在配置配置檔案中瞭解更多關於透過終端配置檔案自定義終端的資訊。
我可以為資源管理器的“在整合終端中開啟”命令新增鍵盤快捷鍵嗎?
你可以透過資源管理器的 在整合終端中開啟 上下文選單命令為特定資料夾開啟新終端。
預設情況下,沒有與 在整合終端中開啟 關聯的鍵盤快捷鍵,但你可以透過鍵盤快捷鍵編輯器 (⌘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
{
"@^\UF700" = "noop:";
"@^\UF701" = "noop:";
"@^\UF702" = "noop:";
"@^\UF703" = "noop:";
"@~^\UF700" = "noop:";
"@~^\UF701" = "noop:";
"@~^\UF702" = "noop:";
"@~^\UF703" = "noop:";
}
EOF
我對終端渲染有問題。我該怎麼辦?
預設情況下,整合終端將在大多數機器上使用 GPU 加速進行渲染。通常,當出現渲染問題時,是你硬體/作業系統/驅動程式中的某些東西與 GPU 渲染器不相容的問題。首先要嘗試的是停用 GPU 加速,以 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 處於 Vim 模式而不是 Emacs 模式,可能會發生這種情況,這是因為在你的初始化指令碼中將 $EDITOR
或 $VISUAL
設定為 vi
/vim
。
要解決這個問題,你有兩個選擇:
- 確保你沒有將
$EDITOR
設定為vi(m)
。但是,如果你希望你的 Git 編輯器工作,這不是一個選項。 - 將
bindkey -e
新增到你的初始化指令碼中,以明確設定 Emacs 模式。
如何配置 Cmd+. 對映到 Ctrl+C,就像 macOS 的內建終端一樣?
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
有關更多資訊,請參閱最小對比度部分。