URLhttps://learnscript.net/zh-hant/vscode/terminal/advanced/
    複製連結移至說明  範例

    Visual Studio Code 終端機高級功能使用說明

    閱讀 19:06·字數 5734·發佈 
    Youtube 頻道
    訂閱 375

    Visual Studio Code 可存取的檢視

    可存取的檢視是一種輔助性檢視,該檢視預設位於 Visual Studio Code 的上方區域,其內容來自於命令列應用的緩沖區。可存取的檢視提供了更加便利的文字操作,可以輕松的選取並複製命令或命令的輸出結果。

    Visual Studio Code檔案總管終端機問題可存取的檢視

    如何在執行命令時顯示可存取的檢視並使其獲得焦點?

    如果設定項terminal.integrated.accessibleViewFocusOnCommandExecutiontrue(預設值為false),那麽在命令列應用中執行命令,將顯示可存取的檢視並使其獲得焦點。

    settings.json
    {
    	// 執行命令時顯示可存取的檢視並使其獲得焦點
    	"terminal.integrated.accessibleViewFocusOnCommandExecution": true,
    }

    如何保留遊標在可存取的檢視中的位置?

    如果設定項terminal.integrated.accessibleViewPreserveCursorPositiontrue(預設值為false),那麽在可存取的檢視重新顯示後,將恢復遊標之前的位置,而不是顯示在可存取的檢視的底端。

    settings.json
    {
    	// 保留遊標在可存取的檢視中的位置
    	"terminal.integrated.accessibleViewPreserveCursorPosition": true,
    }

    自動回應 Visual Studio Code 終端機傳送的訊息

    在命令執行的過程中,命令列應用可能會與使用者產生互動,輸出一些訊息並要求使用者輸入某些內容,比如,輸入Y來確認對檔案的刪除。

    通過設定項terminal.integrated.autoReplies,可以自動回應命令列應用輸出的訊息,該設定項是一個物件,物件的屬性名稱用於比對命令列輸出的訊息(輸出訊息需要包含屬性名稱,不需要完全相符),物件的屬性的值是自動回應的內容,他可以是null(表示無任何回應)或一個支援進行跳脫的字串,可使用\r來表示Enter鍵。

    如果修改設定項terminal.integrated.autoReplies之後未達到預期效果,可以嘗試重新啟動 Visual Studio Code。

    在下面的範例中,我們通過設定項terminal.integrated.autoReplies來自動回應命令npm init的一些輸出訊息,這包括填寫套件名稱,版本,以及輸入no以封鎖檔案package.json的建置。

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

    在每一秒內終端機只能自動回應一次

    對於設定項terminal.integrated.autoReplies的同一個屬性,只能在一秒內進行一次自動回應,即便該屬性的名稱與命令列中的不同輸出訊息相符。

    在批次檔auto.bat中,我們要求輸入姓名和年齡,如果使用者快速多次按下Enter鍵,那麽終端機可能無法自動回應所有來自於命令提示字元的訊息。

    auto.bat
    @echo off
    for /l %%i in (1, 1, 10) do (
    	set /p name=Enter Name:
    	set /p age=Enter Age:
    )
    settings.json
    {
    	// 自動回應
    	"terminal.integrated.autoReplies": {
    		// …
    		"Enter Name": "someone\r",
    		"Enter Age": "10\r",
    	},
    }

    終端機可能無法自動回應具有樣式的輸出訊息

    設定項terminal.integrated.autoReplies可能無法讓 Visual Studio Code 自動回應具有樣式的輸出訊息。

    將繫結的按鍵傳送至 Visual Studio Code 而非終端機

    在預設情況下,一些命令所繫結的按鍵將被傳送至 Visual Studio Code,而不是終端機所啟動的命令列應用,比如,與命令workbench.action.quickOpen繫結的按鍵Ctrl+P,按下Ctrl+P將由 Visual Studio Code 顯示一組檔案以便快速開啟他們。通過設定項terminal.integrated.commandsToSkipShell,你可以新增某個命令,使其具有上述效果,或使用-前綴新增某個命令,使其失去上述效果。

    在下面的範例中,我們使用-將命令workbench.action.quickOpenworkbench.action.terminal.focusFind所繫結的按鍵傳送至命令列應用。

    settings.json
    {
    	// 與命令相關的按鍵將被傳送至 VSCode 而非命令列,除非使用 -
    	"terminal.integrated.commandsToSkipShell": [
    		// 以下命令的相關按鍵將被傳送至命令列
    		"-workbench.action.quickOpen",
    		"-workbench.action.terminal.focusFind",
    	],
    }

    通過將設定項terminal.integrated.sendKeybindingsToShell設定為true(預設值為false),多數命令所繫結的按鍵將被傳送至命令列應用而不是 Visual Studio Code,這意味著設定項terminal.integrated.commandsToSkipShell將被覆蓋。

    settings.json
    {
    	// 將多數命令的相關按鍵傳送至 VSCode
    	"terminal.integrated.sendKeybindingsToShell": true,
    }

    如何將命令所繫結的組合按鍵傳送至終端機?

    設定項terminal.integrated.allowChords可用於設定將命令繫結的組合按鍵(需要依次按下多個鍵的組合)傳送至 Visual Studio Code 還是終端機所啟動的命令列應用,如果該設定項被設定為false(預設為true),那麽組合按鍵(比如,Ctrl+K)將被傳送至命令列,而不是由 Visual Studio Code 等候使用者按下下一個按鍵。

    settings.json
    {
    	// 組合按鍵將被傳送至命令列
    	"terminal.integrated.allowChords": false,
    }

    如何在終端機中使用功能表列的助記鍵?

    預設情況下,在終端機所啟動的命令列應用中,無法通過功能表列的助記鍵(比如,Alt+F)開啟功能表列,你可以將設定項terminal.integrated.allowMnemonics設定為true(預設為false),讓功能表列的助記鍵在命令列應用中生效,這可能導致所有Alt鍵被傳送至 Visual Studio Code。

    需要指出的是,設定項terminal.integrated.allowMnemonics不適用於 macOS。

    settings.json
    {
    	// 允許使用助記鍵開啟功能表列
    	"terminal.integrated.allowMnemonics": true,
    }

    在 Visual Studio Code 終端機中顯示影像

    如果設定項terminal.integrated.gpuAcceleration不為off,WebGL 加速可用,設定項terminal.integrated.enableImages被設定為true(預設值為false),那麽終端機所啟動的命令列應用將支援顯示影像。

    需要指出,由於命令列中的影像無法被序列化,因此,重新開啟的命令列應用無法顯示之前的影像。

    終端機不支援 gif 動畫

    在正確設定之後,終端機所啟動的命令列應用可以顯示pngjpg等類型的影像檔案,但對於gif類型的影像檔案,無法展示其動畫效果。

    複製終端機輸出內容所得到的 HTML 程式碼不會包含影像

    如果你將命令列應用的輸出複製為 HTML 程式碼,那麽這些程式碼不會包含影像的相關資訊。

    外觀和樣式

    關於終端機的 GPU 加速功能,你可以檢視設定 Visual Studio Code 終端機的 GPU 加速功能一段。

    在修改設定項terminal.integrated.enableImages之後,可以嘗試安裝並使用 Python 套件imgcat在命令列中顯示圖片。

    settings.json
    {
    	// 在命令列中顯示影像
    	"terminal.integrated.enableImages": true,
    }

    在 Visual Studio Code 終端機中使用自黏捲動覆蓋層

    在預設情況下,終端機所啟動的命令列應用沒有自黏捲動覆蓋區,可以將設定項terminal.integrated.stickyScroll.enabled設定為true(預設值為false)來啟用自黏捲動覆蓋區,該覆蓋區通常會顯示被執行的命令。

    終端機問題自黏捲動覆蓋區

    設定終端機自黏捲動覆蓋區的最大行數

    通過設定項terminal.integrated.stickyScroll.maxLineCount,可以設定命令列應用的自黏捲動覆蓋區的最大行數,該行數不能超過10

    settings.json
    {
    	// 啟用命令列的自黏捲動覆蓋區
    	"terminal.integrated.stickyScroll.enabled": true,
    	// 自黏捲動覆蓋區的最大行數為 10
    	"terminal.integrated.stickyScroll.maxLineCount": 10,
    }

    在遠端工作區的 Visual Studio Code 終端機中使用本機回應

    如果 Visual Studio Code 開啟了遠端工作區,那麽使用者在本機的輸入(比如某一個字元)會被傳遞至遠端伺服器的命令列應用,其處理結果將傳回並顯示在終端機中。當本機與遠端伺服器存在較大網路延遲時,這會帶來不好的使用者體驗,而通過設定項terminal.integrated.localEchoEnabled啟用本機回應功能,可使使用者的輸入快速顯示在終端機中,無需等候遠端伺服器的處理,該設定項擁有以下取值。

    auto

    auto表示為遠端工作區終端機啟用本機回應。

    on

    on表示始終啟用終端機本機回應,無論是否為遠端工作區。

    off

    off表示始終停用終端機本機回應,無論是否為遠端工作區。

    settings.json
    {
    	// 始終開啟本機回應
    	"terminal.integrated.localEchoEnabled": "on",
    }

    設定遠端工作區終端機的本機回應延遲閾值

    通過設定項terminal.integrated.localEchoLatencyThreshold,可以設定遠端工作區終端機的本機回應延遲閾值(以毫秒為單位),如果等候時間超過該閾值,那麽使用者在本機的輸入將直接顯示在終端機中。如果該設定項被設定為0,則始終進行本機回應,如果設定為-1(不應該小於-1),則不會進行本機回應。

    settings.json
    {
    	// 立即進行本機回應
    	"terminal.integrated.localEchoLatencyThreshold": 0,
    }

    設定遠端工作區終端機的本機回應文字的樣式

    通過設定項terminal.integrated.localEchoStyle,可以設定遠端工作區命令列中本機回應文字的樣式,樣式可以是色彩(比如,#FF0000),bold(粗體),dim(預設值,暗淡),italic(斜體),underlined(底線),inverted(反轉背景色彩和前景色彩)。

    settings.json
    {
    	// 本機回應文字的色彩為紅色
    	"terminal.integrated.localEchoStyle": "#ff0000",
    }

    設定停用本機回應的終端機

    如果你希望對特定的命令列應用停用本機回應,那麽可以使用設定項terminal.integrated.localEchoExcludePrograms,該設定項是一個包含字串的陣列,當命令列的相關資訊包含陣列中的某個字串時,命令列的本機回應功能將被停用。

    settings.json
    {
    	// 命令列的相關資訊包含以下某個關鍵字,則本機回應將被停用
    	"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,即便擁有尚未終止的命令列應用。

    關閉終端機面板不等於終止終端機

    關閉終端機面板不等於終止其所包含的命令列應用,因此,如果設定項terminal.integrated.confirmOnExit不為預設值never,那麽在關閉 Visual Studio Code 時依然可能需要確認,即便終端機面板未顯示。

    settings.json
    {
    	// 如果任意命令列擁有子處理序,則需要在關閉 VSCode 時確認
    	"terminal.integrated.confirmOnExit": "hasChildProcesses",
    }

    設定是否需要在終止 Visual Studio Code 終端機時確認

    如果你希望設定是否需要在終止擁有子處理序的命令列應用時確認終止,那麽可以使用設定項terminal.integrated.confirmOnKill,該設定項擁有以下有效取值。

    always

    always表示始終需要在終止擁有子處理序的命令列應用時確認,無論該命令列位於終端機面板還是編輯器區域。

    editor

    editor(預設值)表示需要在終止擁有子處理序的命令列應用時確認,如果該命令列位於編輯器區域。

    panel

    panel表示需要在終止擁有子處理序的命令列應用時確認,如果該命令列位於終端機面板

    never

    never表示直接關閉命令列應用,即便該命令列擁有子處理序。

    settings.json
    {
    	// 如果命令列擁有子處理序,則需要在終止時確認
    	"terminal.integrated.confirmOnKill": "always",
    }

    設定是否為 Visual Studio Code 終端機的非零結束代碼顯示警示

    如果終端機所啟動的命令列應用在終止時傳回的結束代碼不為0,那麽 Visual Studio Code 將顯示警示「終端機處理序 … 已終止,結束代碼:…」,將設定項terminal.integrated.showExitAlert設定為false,可停用該功能。

    在下面的範例中,我們通過設定項terminal.integrated.showExitAlert停用了警告,因此,在 Windows 命令提示字元輸入exit 100不會出現警示,如果你在 Visual Studio Code 中開啟了命令提示字元

    settings.json
    {
    	// 不顯示警示,即便命令列的結束代碼不為 0
    	"terminal.integrated.showExitAlert": false,
    }
    # 命令提示字元
    exit 100

    設定是否為 Visual Studio Code 終端機啟用命令修飾

    終端機所啟動的命令列應用中,命令修飾可以為已執行的命令提供操作功能表,通過設定項terminal.integrated.shellIntegration.decorationsEnabled可以設定是否為命令列應用啟用命令修飾,他擁有以下有效取值。

    both

    both(預設值)表示在命令列應用的裝訂邊中顯示命令修飾,並將在概觀標尺中標記命令修飾的位置。

    gutter

    gutter表示在命令列應用的裝訂邊中顯示命令修飾。

    overviewRuler

    overviewRuler表示僅在命令列應用的概觀標尺中標記命令修飾的位置,但不會在裝訂邊中顯示命令修飾。

    never

    never表示不顯示命令修飾,也不標記其位置。

    settings.json
    {
    	// 將命令修飾顯示在裝訂邊中
    	"terminal.integrated.shellIntegration.decorationsEnabled": "gutter",
    }

    設定是否顯示 Visual Studio Code 終端機的命令指南

    終端機所啟動的命令列應用中,命令指南預設顯示在已執行命令和輸出結果的左邊裝訂邊中,當滑鼠暫留時。如果將設定項terminal.integrated.shellIntegration.showCommandGuide設定為false(預設為true),那麽命令列中的命令指南將不再顯示。

    settings.json
    {
    	// 不再顯示命令指南
    	"terminal.integrated.shellIntegration.showCommandGuide": false,
    }

    設定是否為 Visual Studio Code 終端機註入腳本

    一些特定的功能,比如自黏捲動覆蓋區,需要在命令列應用啟動時向其註入腳本,如果設定項terminal.integrated.shellIntegration.enabledfalse(預設為true),那麽相關腳本不會被註入,這表示某些功能將消失。

    無法向所有的命令列應用註入腳本

    並非所有的命令列應用均支援腳本註入,因此即便設定項terminal.integrated.shellIntegration.enabled不為false,一些功能也無法在不支援腳本註入的命令列中實作。

    settings.json
    {
    	// 允許腳本註入
    	"terminal.integrated.shellIntegration.enabled": true,
    }

    原始碼

    src/zh-hant/terminal/advanced·codebeatme/vscode·GitHub