Visual Studio Code 終端機高級功能使用說明
Visual Studio Code 可存取的視圖
Visual Studio Code 可存取的視圖是一種輔助性視圖,該視圖預設位於 Visual Studio Code 的上方區域,其內容來自於命令列應用的緩沖區。可存取的視圖提供了更加便利的文字操作,可以輕松的選取並複製命令或命令的輸出結果。
如何在執行命令時顯示 Visual Studio Code 可存取的視圖並使其獲得焦點?
如果 Visual Studio Code 設定項terminal.integrated.accessibleViewFocusOnCommandExecution
為true
(預設值為false
),那麽在命令列應用中執行命令,將顯示 Visual Studio Code 可存取的視圖並使其獲得焦點。
{
// 執行命令時顯示可存取的視圖並使其獲得焦點
"terminal.integrated.accessibleViewFocusOnCommandExecution": true,
}
如何保留遊標在 Visual Studio Code 可存取的視圖中的位置?
如果 Visual Studio Code 設定項terminal.integrated.accessibleViewPreserveCursorPosition
為true
(預設值為false
),那麽在可存取的視圖重新顯示後,將恢復遊標之前的位置,而不是顯示在可存取的視圖的底部。
{
// 保留遊標在可存取的視圖中的位置
"terminal.integrated.accessibleViewPreserveCursorPosition": true,
}
自動回應 Visual Studio Code 終端機傳送的訊息
在命令執行的過程中,命令列應用可能會與使用者產生互動,輸出一些訊息並要求使用者輸入某些內容,比如,輸入Y
來確認對檔案的刪除。
通過 Visual Studio Code 的設定項terminal.integrated.autoReplies
,可以自動回應命令列應用輸出的訊息,該設定項是一個物件,物件的屬性名稱用於比對命令列輸出的訊息(輸出訊息需要包含屬性名稱,不需要完全相符),物件的屬性的值是自動回應的內容,他可以是null
(表示無任何回應)或一個支援進行逸出的字串,可使用\r
來表示Enter鍵。
如果修改設定項terminal.integrated.autoReplies
之後未達到預期效果,可以嘗試重新啟動 Visual Studio Code。
在下面的範例中,我們通過設定項terminal.integrated.autoReplies
來自動回應命令npm init
的一些輸出訊息,這包括填寫套件名稱,版本,以及輸入no
以阻止檔案package.json
的建置。
{
// 自動回應
"terminal.integrated.autoReplies": {
"package name:": "auto\r",
"version:": "0.0.0\r",
"(yes)": "no\r",
},
}
npm init
package name: (…) auto
version: (1.0.0) 0.0.0
…
Is this OK? (yes) no
Aborted.
在每一秒內 Visual Studio Code 終端機只能自動回應一次
對於 Visual Studio Code 設定項terminal.integrated.autoReplies
的同一個屬性,只能在一秒內進行一次自動回應,即便該屬性的名稱與命令列中的不同輸出訊息相符。
在批次檔auto.bat
中,我們要求輸入姓名和年齡,如果使用者快速多次按下Enter鍵,那麽 Visual Studio Code 終端機可能無法自動回應所有來自於命令提示字元的訊息。
@echo off
for /l %%i in (1, 1, 10) do (
set /p name=Enter Name:
set /p age=Enter Age:
)
{
// 自動回應
"terminal.integrated.autoReplies": {
// …
"Enter Name": "someone\r",
"Enter Age": "10\r",
},
}
Visual Studio Code 終端機可能無法自動回應具有樣式的輸出訊息
設定項terminal.integrated.autoReplies
可能無法讓 Visual Studio Code 自動回應具有樣式的輸出訊息。
將繫結的按鍵傳送至 Visual Studio Code 而非終端機
在預設情況下,一些命令所繫結的按鍵將被傳送至 Visual Studio Code,而不是 Visual Studio Code 終端機所啟動的命令列應用,比如,與命令workbench.action.quickOpen
繫結的按鍵Ctrl+P,按下Ctrl+P將由 Visual Studio Code 顯示一組檔案以便快速開啟他們。通過設定項terminal.integrated.commandsToSkipShell
,你可以新增某個命令,使其具有上述效果,或使用-
首碼新增某個命令,使其失去上述效果。
在下面的範例中,我們使用-
將命令workbench.action.quickOpen
和workbench.action.terminal.focusFind
所繫結的按鍵傳送至命令列應用。
{
// 與命令相關的按鍵將被傳送至 VSCode 而非命令列,除非使用 -
"terminal.integrated.commandsToSkipShell": [
// 以下命令的相關按鍵將被傳送至命令列
"-workbench.action.quickOpen",
"-workbench.action.terminal.focusFind",
],
}
通過將 Visual Studio Code 設定項terminal.integrated.sendKeybindingsToShell
設定為true
(預設值為false
),多數命令所繫結的按鍵將被傳送至命令列應用而不是 Visual Studio Code,這意味著設定項terminal.integrated.commandsToSkipShell
將被覆蓋。
{
// 將多數命令的相關按鍵傳送至 VSCode
"terminal.integrated.sendKeybindingsToShell": true,
}
如何將命令所繫結的組合按鍵傳送至 Visual Studio Code 終端機?
Visual Studio Code 設定項terminal.integrated.allowChords
可用於設定將命令繫結的組合按鍵(需要依次按下多個鍵的組合)傳送至 Visual Studio Code 還是 Visual Studio Code 終端機所啟動的命令列應用,如果該設定項被設定為false
(預設為true
),那麽組合按鍵(比如,Ctrl+K)將被傳送至命令列,而不是由 Visual Studio Code 等待使用者按下下一個按鍵。
{
// 組合按鍵將被傳送至命令列
"terminal.integrated.allowChords": false,
}
如何在 Visual Studio Code 終端機中使用功能表欄的助記鍵?
預設情況下,在 Visual Studio Code 終端機所啟動的命令列應用中,無法通過功能表欄的助記鍵(比如,Alt+F)開啟功能表欄,你可以將 Visual Studio Code 設定項terminal.integrated.allowMnemonics
設定為true
(預設為false
),讓功能表欄的助記鍵在命令列應用中生效,這可能導致所有Alt鍵被傳送至 Visual Studio Code。
需要指出的是,Visual Studio Code 設定項terminal.integrated.allowMnemonics
不適用於 macOS。
{
// 允許使用助記鍵開啟功能表欄
"terminal.integrated.allowMnemonics": true,
}
在 Visual Studio Code 終端機中顯示影像
如果 Visual Studio Code 設定項terminal.integrated.gpuAcceleration
不為off
,WebGL 加速可用,設定項terminal.integrated.enableImages
被設定為true
(預設值為false
),那麽 Visual Studio Code 終端機所啟動的命令列應用將支援顯示影像。
需要指出,由於 Visual Studio Code 命令列中的影像無法被序列化,因此,重新開啟的命令列應用無法顯示之前的影像。
Visual Studio Code 終端機不支援 gif 動畫
在正確設定之後,Visual Studio Code 終端機所啟動的命令列應用可以顯示png
,jpg
等類型的影像檔案,但對於gif
類型的影像檔案,無法展示其動畫效果。
複製 Visual Studio Code 終端機輸出內容所得到的 HTML 程式碼不會包含影像
如果你將 Visual Studio Code 命令列應用的輸出複製為 HTML 程式碼,那麽這些程式碼不會包含影像的相關資訊。
外觀和樣式
關於 Visual Studio Code 終端機的 GPU 加速功能,你可以檢視設定 Visual Studio Code 終端機的 GPU 加速功能一段。
在修改設定項terminal.integrated.enableImages
之後,可以嘗試安裝並使用 Python 套件imgcat
在命令列中顯示圖片。
{
// 在命令列中顯示影像
"terminal.integrated.enableImages": true,
}
在 Visual Studio Code 終端機中使用自黏捲動覆蓋層
在預設情況下,Visual Studio Code 終端機所啟動的命令列應用沒有自黏捲動覆蓋區,可以將設定項terminal.integrated.stickyScroll.enabled
設定為true
(預設值為false
)來啟用自黏捲動覆蓋區,該覆蓋區通常會顯示被執行的命令。
設定 Visual Studio Code 終端機自黏捲動覆蓋區的最大行數
通過 Visual Studio Code 設定項terminal.integrated.stickyScroll.maxLineCount
,可以設定命令列應用的自黏捲動覆蓋區的最大行數,該行數不能超過10
。
{
// 啟用命令列的自黏捲動覆蓋區
"terminal.integrated.stickyScroll.enabled": true,
// 自黏捲動覆蓋區的最大行數為 10
"terminal.integrated.stickyScroll.maxLineCount": 10,
}
在遠端工作區的 Visual Studio Code 終端機中使用本機回應
如果 Visual Studio Code 開啟了遠端工作區,那麽使用者在本機的輸入(比如某一個字元)會被傳遞至遠端伺服器的命令列應用,其處理結果將傳回並顯示在 Visual Studio Code 終端機中。當本機與遠端伺服器存在較大網路延遲時,這會帶來不好的使用者體驗,而通過設定項terminal.integrated.localEchoEnabled
啟用本機回應功能,可使使用者的輸入快速顯示在 Visual Studio Code 終端機中,無需等待遠端伺服器的處理,該設定項擁有以下取值。
- auto
auto
表示為 Visual Studio Code 遠端工作區終端機啟用本機回應。- on
on
表示始終啟用 Visual Studio Code 終端機本機回應,無論是否為遠端工作區。- off
off
表示始終停用 Visual Studio Code 終端機本機回應,無論是否為遠端工作區。
{
// 始終開啟本機回應
"terminal.integrated.localEchoEnabled": "on",
}
設定 Visual Studio Code 遠端工作區終端機的本機回應延遲閾值
通過 Visual Studio Code 設定項terminal.integrated.localEchoLatencyThreshold
,可以設定遠端工作區終端機的本機回應延遲閾值(以毫秒為單位),如果等待時間超過該閾值,那麽使用者在本機的輸入將直接顯示在 Visual Studio Code 終端機中。如果該設定項被設定為0
,則始終進行本機回應,如果設定為-1
(不應該小於-1
),則不會進行本機回應。
{
// 立即進行本機回應
"terminal.integrated.localEchoLatencyThreshold": 0,
}
設定 Visual Studio Code 遠端工作區終端機的本機回應文字的樣式
通過 Visual Studio Code 設定項terminal.integrated.localEchoStyle
,可以設定遠端工作區命令列中本機回應文字的樣式,樣式可以是色彩(比如,#FF0000
),bold
(粗體),dim
(預設值,暗淡),italic
(斜體),underlined
(底線),inverted
(反轉背景色彩和前景色彩)。
{
// 本機回應文字的色彩為紅色
"terminal.integrated.localEchoStyle": "#ff0000",
}
設定停用本機回應的 Visual Studio Code 終端機
如果你希望對特定的命令列應用停用本機回應,那麽可以使用 Visual Studio Code 的設定項terminal.integrated.localEchoExcludePrograms
,該設定項是一個包含字串的陣列,當命令列的相關資訊包含陣列中的某個字串時,命令列的本機回應功能將被停用。
{
// 命令列的相關資訊包含以下某個關鍵字,則本機回應將被停用
"terminal.integrated.localEchoExcludePrograms": [
"powershell",
"cmd",
],
}
設定是否需要在關閉 Visual Studio Code 視窗時確認
如果你希望設定是否需要在關閉(結束) Visual Studio Code 且擁有尚未終止的命令列應用時確認關閉,那麽可以使用設定項terminal.integrated.confirmOnExit
,該設定項擁有以下有效取值。
- always
always
表示始終需要在關閉 Visual Studio Code 時確認,如果擁有尚未終止的命令列應用。- hasChildProcesses
hasChildProcesses
表示需要在關閉 Visual Studio Code 時確認,如果任意命令列應用擁有子處理序,比如,啟動了 Python 互動模式的 PowerShell。- never
never
(預設值)表示直接關閉 Visual Studio Code,即便擁有尚未終止的命令列應用。
關閉 Visual Studio Code 終端機面板不等於終止終端機
關閉 Visual Studio Code 終端機面板不等於終止其所包含的命令列應用,因此,如果設定項terminal.integrated.confirmOnExit
不為預設值never
,那麽在關閉 Visual Studio Code 時依然可能需要確認,即便終端機面板未顯示。
{
// 如果任意命令列擁有子處理序,則需要在關閉 VSCode 時確認
"terminal.integrated.confirmOnExit": "hasChildProcesses",
}
設定是否需要在終止 Visual Studio Code 終端機時確認
如果你希望設定是否需要在終止擁有子處理序的 Visual Studio Code 命令列應用時確認終止,那麽可以使用設定項terminal.integrated.confirmOnKill
,該設定項擁有以下有效取值。
- always
always
表示始終需要在終止擁有子處理序的 Visual Studio Code 命令列應用時確認,無論該命令列位於終端機面板還是編輯器區域。- editor
editor
(預設值)表示需要在終止擁有子處理序的 Visual Studio Code 命令列應用時確認,如果該命令列位於編輯器區域。- panel
panel
表示需要在終止擁有子處理序的 Visual Studio Code 命令列應用時確認,如果該命令列位於終端機面板。- never
never
表示直接關閉 Visual Studio Code 命令列應用,即便該命令列擁有子處理序。
{
// 如果命令列擁有子處理序,則需要在終止時確認
"terminal.integrated.confirmOnKill": "always",
}
設定是否為 Visual Studio Code 終端機的非零結束代碼顯示警示
如果 Visual Studio Code 終端機所啟動的命令列應用在終止時傳回的結束代碼不為0
,那麽 Visual Studio Code 將顯示警示“終端機處理序 … 已終止,結束代碼:…”,將設定項terminal.integrated.showExitAlert
設定為false
,可停用該功能。
在下面的範例中,我們通過設定項terminal.integrated.showExitAlert
停用了警告,因此,在 Windows 命令提示字元輸入exit 100
不會出現警示,如果你在 Visual Studio Code 中開啟了命令提示字元。
{
// 不顯示警示,即便命令列的結束代碼不為 0
"terminal.integrated.showExitAlert": false,
}
# 命令提示字元
exit 100
設定是否為 Visual Studio Code 終端機啟用命令修飾
在 Visual Studio Code 終端機所啟動的命令列應用中,命令修飾可以為已執行的命令提供操作功能表,通過 Visual Studio Code 設定項terminal.integrated.shellIntegration.decorationsEnabled
可以設定是否為命令列應用啟用命令修飾,他擁有以下有效取值。
- both
both
(預設值)表示在 Visual Studio Code 命令列應用的裝訂邊中顯示命令修飾,並將在概述標尺中標記命令修飾的位置。- gutter
gutter
表示在 Visual Studio Code 命令列應用的裝訂邊中顯示命令修飾。- overviewRuler
overviewRuler
表示僅在 Visual Studio Code 命令列應用的概述標尺中標記命令修飾的位置,但不會在裝訂邊中顯示命令修飾。- never
never
表示不顯示命令修飾,也不標記其位置。
{
// 將命令修飾顯示在裝訂邊中
"terminal.integrated.shellIntegration.decorationsEnabled": "gutter",
}
設定是否顯示 Visual Studio Code 終端機的命令指南
在 Visual Studio Code 終端機所啟動的命令列應用中,命令指南預設顯示在已執行命令和輸出結果的左邊裝訂邊中,當滑鼠暫留時。如果將 Visual Studio Code 設定項terminal.integrated.shellIntegration.showCommandGuide
設定為false
(預設為true
),那麽命令列中的命令指南將不再顯示。
{
// 不再顯示命令指南
"terminal.integrated.shellIntegration.showCommandGuide": false,
}
設定是否為 Visual Studio Code 終端機註入腳本
一些特定的功能,比如自黏捲動覆蓋區,需要 Visual Studio Code 在命令列應用啟動時向其註入腳本,如果 Visual Studio Code 的設定項terminal.integrated.shellIntegration.enabled
為false
(預設為true
),那麽相關腳本不會被註入,這表示某些功能將消失。
Visual Studio Code 無法向所有的命令列應用註入腳本
並非所有的命令列應用均支援腳本註入,因此即便 Visual Studio Code 的設定項terminal.integrated.shellIntegration.enabled
不為false
,一些功能也無法在不支援腳本註入的命令列中實作。
{
// 允許腳本註入
"terminal.integrated.shellIntegration.enabled": true,
}