Windows Terminal 終極指南

最好的Linux發(fā)行版是Windows 10。
上面這句話雖然只是玩笑,但隨著微軟接連發(fā)布 WSL (Windows Subsystem Linux) 和全新的 Windows Terminal,Windows 和 Linux 之間的界限已經(jīng)開始變得模糊了。許多非Linux不可事情已經(jīng)可以在Windows上實現(xiàn),需要頻繁在Linux和Windows之間切換的場景也不需要雙系統(tǒng)或者虛擬機了。
本文旨在介紹 Windows Terminal 的配置方法,并與大家交流分享一些 Windows Terminal 的使用心得和技巧。
目前(2020年4月初)Windows Terminal 仍處于預(yù)覽版階段,版本號v0.10.781.0,Windows Terminal 的某些功能可能還不完善,或者在后續(xù)的更新中發(fā)生變化。

1、配置文件

在標(biāo)簽欄的下拉菜單中可以找到 Settings 選項。目前的設(shè)置只能通過編輯?profiles.json 文件來更改,沒有圖形界面。單擊 Settings 選項即可打開?profiles.json 文件。
Tips:按住 Alt 鍵再點擊 Settings 選項可以打開一個 defaults.json 文件,里面存放的是 Windows Terminal 各種設(shè)置的默認(rèn)值。需要注意的是,這些默認(rèn)值目前是硬編碼在代碼中的,修改這個文件不會應(yīng)用在程序中,這個文件只是給你看的。
配置文件的結(jié)構(gòu)并不復(fù)雜,大體可以分為四個部分:

全局設(shè)置?
最外側(cè)的是全局設(shè)置。包括窗口大小、默認(rèn)啟動配置、深色\淺色主題等。其實下面的三項也是全局設(shè)置的其中之一,但是很有必要將它們單獨提出來討論。
啟動環(huán)境配置 profiles
啟動不同 shell 環(huán)境時加載的配置列表,這個列表會顯示在標(biāo)簽欄的下拉菜單中。如菜單中的 Windows PowerShell、cmd等,可以針對不同的 shell 環(huán)境配置不同的字體、背景、顏色等等。
顏色主題 schemes
自定義配色方案列表。
按鍵綁定?keybindings
自定義快捷鍵列表。
1.1、全局設(shè)置
下圖是 defaults.json 中全局設(shè)置的默認(rèn)值:

alwaysShowTabs:顯示標(biāo)簽欄。如果 alwaysShowTabs 和 showTabsInTitlebar 同時設(shè)置為 false,那么標(biāo)簽欄會被隱藏,此時可以通過按下 ctrl + T 鍵顯示標(biāo)簽欄。
defaultProfile:默認(rèn)啟動的 shell 環(huán)境。通過GUID來指定啟動環(huán)境配置中的某一項。默認(rèn)是 PowerShell 的啟動配置。
initialCols:啟動時窗口的列數(shù)。默認(rèn)值是120。
initialRows:啟動時窗口的行數(shù)。默認(rèn)值是30。
requestedTheme:深色\淺色主題??梢允?#34;dark"深色、"light"淺色、"system"跟隨系統(tǒng)。默認(rèn)值是"system"。
showTabsInTitlebar:設(shè)置為 true 時,將標(biāo)簽顯示在窗口標(biāo)題欄中,并隱藏窗口標(biāo)題。設(shè)置為 false 時,會顯示窗口標(biāo)題欄,標(biāo)簽欄會顯示在窗口標(biāo)題下方。需要重啟窗口生效。
showTerminalTitleInTitlebar:控制窗口標(biāo)題欄的內(nèi)容。設(shè)置為 true 時,窗口標(biāo)題會顯示為當(dāng)前標(biāo)簽的標(biāo)題;設(shè)置為 false 時,窗口標(biāo)題固定顯示“Windows Terminal”。

tabWidthMode:控制標(biāo)簽寬度。可以是"equal":所有標(biāo)簽等寬,或"titleLength":根據(jù)標(biāo)題長度變化。默認(rèn)值是"equal"。
snapToGridOnResize:設(shè)置為 true 時,調(diào)整窗口大小會自動吸附到最近的字符邊界,設(shè)置為 false 時,調(diào)整窗口大小則會平滑地變化。
wordDelimiters:雙擊選詞時用于確定單詞分界的分割字符。
confirmCloseAllTabs:設(shè)置為?true 時,如果打開了多個標(biāo)簽頁,在關(guān)閉窗口時會彈出確認(rèn)對話框。設(shè)置為 false 則會直接關(guān)閉窗口而不會彈出確認(rèn)對話框。
除了上述選項之外,全局設(shè)置還有下列選項:
copyOnSelect:設(shè)置為 true 時,鼠標(biāo)選詞后會自動復(fù)制所選內(nèi)容。默認(rèn)值是 false。
copyFormatting:設(shè)置為 true 時,復(fù)制的內(nèi)容會包含格式信息(字體、字號、顏色等)。設(shè)置為 false 時,只復(fù)制純文本。默認(rèn)值是 false。
initialPosition:啟動時窗口左上角在屏幕上的坐標(biāo)。格式為"x,y"。有多個顯示器時,這個坐標(biāo)是相對于主顯示器的坐標(biāo)。如果 launchMode 設(shè)置為"maximized",窗口會最大化顯示在這個坐標(biāo)所在的顯示器上。
launchMode:啟動模式??梢允?#34;default":默認(rèn)窗口,或"maximized":最大化窗口。
rowsToScroll:控制鼠標(biāo)滾輪滾動一格頁面所滾動的行數(shù)。設(shè)置為0或"system"會跟隨系統(tǒng)設(shè)置。
1.2、啟動環(huán)境配置 profiles
作為一款終端,Windows Terminal 可以連接各種不同的 shell。安裝后,Windows Terminal 已經(jīng)為我們配置好了 PowerShell、cmd 以及 Azure Cloud Shell 的環(huán)境,如果你的系統(tǒng)安裝了 WSL,它還會為你配置 WSL 環(huán)境。

profiles?包含兩個部分:defaults?和?list。在?defaults?中設(shè)置的項目會對所有配置生效。list?則是包含所有配置的列表。如果某個項目在?list?中和?defaults?中都設(shè)置了,則?list?中的設(shè)置會覆蓋?defaults?中的設(shè)置。

如果你想加入一個新的配置,只需要在 list 中增加一個配置即可,下面我以 Git Bash 為例來演示配置各個項目的作用。

guid:每一個配置都必須有一個GUID,并且不同配置的GUID不可重復(fù),你可在網(wǎng)上搜索在線GUID生成器,或者使用Visual Studio菜單欄->工具->創(chuàng)建GUID 來創(chuàng)建一個GUID。
name:配置的名字,會顯示在下拉菜單中。
commandline:shell 可執(zhí)行文件的路徑。上圖的路徑是Git Bash的默認(rèn)安裝路徑。
Tips:Windows使用反斜杠"\"來分割路徑,而在json字符串中表示反斜杠需要兩個反斜杠來轉(zhuǎn)義"\\"。但是在Windows Terminal配置文件中可以用正斜杠"/"來代替反斜杠以避免轉(zhuǎn)義。
Tips:在后面加上命令行參數(shù),可以實現(xiàn)很多方便的功能,例如啟動后自動ssh到指定的服務(wù)器。這一點在后文有介紹。
hidden:是否隱藏該配置。如果設(shè)置為true,則配置不會顯示在下拉菜單中,可以用來隱藏系統(tǒng)自動生成的配置(例如Azure?Cloud?Shell,系統(tǒng)生成的配置無法被刪除,不常用的話可以用這個選項隱藏)。
startingDirectory:啟動時shell所在的路徑。
Tips:通常來說,啟動路徑只支持Windows下的路徑,如果你想在啟動wsl時進(jìn)入家目錄,可以如下設(shè)置:"//wsl$/DistroName/home/username"。注意修改其中對應(yīng)wsl發(fā)行版的名字以及你的用戶名。
closeOnExit:是否在退出shell或啟動失敗時關(guān)閉面板??梢允?#34;graceful":在鍵入 exit 命令或進(jìn)程正常退出時關(guān)閉面板(啟動失敗或進(jìn)程異常退出時不會關(guān)閉面板),或"never":從不關(guān)閉面板??梢杂?true 或 false?分別代替"graceful"或"never"。
colorScheme:顏色主題的名字。圖中的"Campbell"是自帶的顏色主題之一,可以在 defaults.json 中查看其他自帶的顏色主題。關(guān)于自定義顏色主題,將在下一節(jié)介紹。
cursorColor:光標(biāo)的顏色。十六進(jìn)制表示的顏色值,格式為"#RRGGBB"。
cursorShape:光標(biāo)的形狀??梢允?"bar"(?┃)、 "emptyBox"(???)、 "filledBox"(?█?)、 "underscore"(?▁?) 或 "vintage"(?▃?)。默認(rèn)值是"bar"。
fontFace:字體。能用什么字體取決于你的系統(tǒng)安裝了什么字體。
fontSize:字號。默認(rèn)值是12。
historySize:命令歷史記錄的最大行數(shù)。默認(rèn)值是9001。
icon:顯示在標(biāo)簽和菜單中的圖標(biāo)。
Tips:官方推薦使用32×32像素的點陣圖(png, gif, ico都可以)??梢员苊饪s放帶來的性能和畫質(zhì)損耗。
padding:邊距,顯示字符的區(qū)域與窗口邊界的距離。格式可以用一個數(shù)字"#"同時定義所有邊距,兩個數(shù)字"#, #"定義左右邊距和上下邊距,或四個數(shù)字"#, #,?#,?#"分別定義左、上、右、下邊距。默認(rèn)值是"8,?8,?8,?8"。
snapOnInput:設(shè)置為 true ,輸入時窗口會自動跳轉(zhuǎn)到輸入行;設(shè)置為 false ,輸入時窗口不會自動跳轉(zhuǎn)。
useAcrylic:設(shè)置為true來啟用亞克力效果,Windows Fluent Design 大法。默認(rèn)值是false。不過顯卡太弱的話會影響性能。

antialiasingMode:抗鋸齒模式??梢允?#34;grayscale":灰度,"cleartype":清晰,或"aliased":無抗鋸齒。效果如下圖所示,默認(rèn)值是"grayscale"。推薦"cleartype"模式,字體更明亮銳利。

除了上述選項外,環(huán)境配置還有下列選項:
acrilicOpacity:啟用亞克力效果時控制窗口透明度。0到1之間的浮點數(shù),0表示完全透明,1表示完全不透明。默認(rèn)值是0.5。
background:背景顏色。十六進(jìn)制表示的顏色值,格式為"#RRGGBB"。注意,如果同時還設(shè)置了?colorScheme,則這個選項會覆蓋?colorScheme?中的設(shè)置。
backgroundImage:背景圖片的路徑。
backgroundImageOpacity:背景圖片的透明度。0到1之間的浮點數(shù),0表示完全透明,1表示完全不透明。
backgroundImageAlignment:背景圖片的對齊方式??梢允?"bottom"、 "bottomLeft"、 "bottomRight"、 "center"、 "left"、 "right"、 "top"、 "topLeft"或"topRight"。默認(rèn)值是"center"。
backgroundImageStretchMode:背景圖片的拉伸模式。可以是 "fill"、 "none"、 "uniform" 或 "uniformToFill"。默認(rèn)值是"uniformToFill"。

cursorHeight:當(dāng)光標(biāo)形狀是"vintage"時,控制光標(biāo)的高度。25到100之間的整數(shù),單位是相對于行高的百分比。
experimental.retroTerminalEffect:實驗性功能,不保證將來的版本會繼續(xù)存在。設(shè)置為true可以啟用模擬CRT顯示器效果,裝逼利器。效果如下圖所示,顯卡太弱的話會影響性能。需要重啟窗口才能生效。

foreground:前景色,即普通文本顯示的顏色。注意,同 background 一樣,如果同時還設(shè)置了?colorScheme,則這個選項會覆蓋?colorScheme?中的設(shè)置。
scrollbarState:滾動條狀態(tài)??梢允?#34;visible":顯示滾動條,或"hidden":隱藏滾動條。
selectionBackground:被選中文本的背景色。注意,同?background?一樣,如果同時還設(shè)置了?colorScheme,則這個選項會覆蓋?colorScheme?中的設(shè)置。
suppressApplicationTitle:忽略應(yīng)用標(biāo)題。設(shè)置為 true 時,標(biāo)簽標(biāo)題固定顯示 tabTitle 設(shè)置的值,設(shè)置為 false 時,標(biāo)簽標(biāo)題根據(jù)當(dāng)前運行的應(yīng)用變化。
tabTitle:啟動時的默認(rèn)標(biāo)簽標(biāo)題。(某些shell可能會忽略這個值,例如bash)。
完成你的配置之后,保存配置文件,即可在下拉菜單中看到新增的Git Bash選項,然后就可以愉快地在Windows Terminal中使用Git Bash了。

1.3、顏色主題 schemes
在defaults.json文件中可以看到Windows Terminal內(nèi)置的顏色主題,例如:

其中 name 字段定義了該主題的名字,可以在環(huán)境配置中通過這個名字來使用這個主題。
你可以在 profiles.json 中增加自定義的主題。例如:

上圖設(shè)置了一個名為VSCode的自定義主題,這個顏色配置是VSCode內(nèi)置Terminal的默認(rèn)配色。你可根據(jù)自己的喜好配置喜歡的顏色,也可以上網(wǎng)搜索,發(fā)現(xiàn)更多好看好用的配色。
Tips:在VSCode中,按ctrl+shift+p打開命令面板,搜索“顏色主題”(color theme),找到“開發(fā)者:使用當(dāng)前設(shè)置生成顏色主題”(Developer: Generate Color Theme From Current Settings)。該命令會根據(jù)當(dāng)前顏色主題生成一個配色文件。在"colors"字段中找到名稱中帶有"terminal.ansi****"系列的顏色,即是當(dāng)前VSCode終端中應(yīng)用的顏色配置。(如果你的當(dāng)前主題使用的是默認(rèn)配色,那么這些值可能會被注釋)
1.4、按鍵綁定 keybindings
同樣,在defaults.json中可以看到默認(rèn)的快捷鍵設(shè)置。例如 ctrl + shift + w 可以關(guān)閉面板、ctrl + shift + c可以復(fù)制所選文本、ctrl + shift + v可以粘貼文本,等等。此外,在下拉菜單中,各個環(huán)境配置右邊也可以看到快捷鍵提示,通過ctrl + shift + 數(shù)字鍵在新標(biāo)簽中打開相應(yīng)的shell環(huán)境。
你可以在profiles.json中添加新的快捷鍵。自定義快捷鍵格式如下:

其中 command 指定要執(zhí)行的命令。若無需參數(shù)或采用默認(rèn)參數(shù),將其指定為對應(yīng)命令的名稱即可;若需帶參數(shù)則需要用第二種格式,通過對應(yīng)的參數(shù)名稱來指定參數(shù)值。同一個命令可以綁定多組快捷鍵。
而 keys 指定了對應(yīng)的按鍵組合,前方的修飾鍵通過加號"+"連接??捎玫男揎楁I包括ctrl、alt、shift。如果多個命令綁定了相同的快捷鍵組合,那么上方的命令會優(yōu)先生效。
如果你想取消某個快捷鍵組合(可能是快捷鍵沖突),可以通過將 command 設(shè)置為 null 實現(xiàn)。例如:{ "command": null, "keys": "ctrl+shfit+w"?},即可取消這組快捷鍵組合。
可以綁定為快捷鍵的命令名稱如下:
closePane:關(guān)閉面板。默認(rèn)快捷鍵是"ctrl+shift+w"。
closeTab:關(guān)閉標(biāo)簽。
closeWindow:關(guān)閉窗口。默認(rèn)快捷鍵是"alt+f4"。
copy:復(fù)制選定文本。默認(rèn)快捷鍵是"ctrl+shift+c"和"ctrl+insert"。可選參數(shù)名稱:trimWhitespace ,布爾類型,設(shè)置為 true 時,刪除行尾的空白字符并保留換行符;設(shè)置為 false 時,保留空白字符并刪除換行符,默認(rèn)值是true。
copyTextWithoutNewlines:。復(fù)制選定文本,不帶換行符。等同于{ "action": "copy", "trimWhitespace": false }。
decreaseFontSize:減小字號。默認(rèn)快捷鍵是"ctrl+-"(或者按住ctrl鼠標(biāo)滾輪往下)。
duplicateTab:復(fù)制當(dāng)前標(biāo)簽頁。默認(rèn)快捷鍵是"ctrl+shift+d"。
increaseFontSize:增大字號。默認(rèn)快捷鍵是"ctrl+="(或者按住ctrl鼠標(biāo)滾輪往上)。
moveFocus:在標(biāo)簽頁的面板之間移動焦點??蛇x參數(shù)名稱:direction,指定焦點移動的方向,可以是"up", "down", "left", "right",默認(rèn)值是"left"。
moveFocusDown:向下移動焦點,默認(rèn)快捷鍵是"alt+down"。等同于{ "action": "moveFocus", "direction": "down" }。
moveFocusLeft:向左移動焦點,默認(rèn)快捷鍵是"alt+left"。等同于{ "action": "moveFocus", "direction": "left" }。
moveFocusRight:向右移動焦點,默認(rèn)快捷鍵是"alt+right"。等同于{ "action": "moveFocus", "direction": "right" }。
moveFocusUp:向上移動焦點,默認(rèn)快捷鍵是"alt+up"。等同于{?"action": "moveFocus", "direction": "up" }。
newTab:新建標(biāo)簽。可選參數(shù):index:整數(shù),指定shell環(huán)境配置在下拉菜單中的序號,注意這個序號是從0開始的,默認(rèn)值是0。profile:字符串,指定shell環(huán)境配置的GUID或名稱,和 index 同時存在時會忽略 index 參數(shù)。commandline:字符串,使用該參數(shù)指定的命令,會覆蓋配置中的設(shè)置。tabTitle:使用該參數(shù)指定的標(biāo)簽標(biāo)題,會覆蓋配置中的設(shè)置。startingDirectory:使用該參數(shù)指定的起始路徑,會覆蓋配置中的設(shè)置。
newTabProfile0:在新標(biāo)簽中打開配置0。默認(rèn)快捷鍵是"ctrl+shift+1"。等同于{?"action":?"newTab",?"index":?0?}。
newTabProfile1:在新標(biāo)簽中打開配置1。默認(rèn)快捷鍵是"ctrl+shift+2"。等同于{?"action":?"newTab",?"index":?1?}。
newTabProfile2:在新標(biāo)簽中打開配置2。默認(rèn)快捷鍵是"ctrl+shift+3"。等同于{?"action":?"newTab",?"index":?2?}。
newTabProfile3:在新標(biāo)簽中打開配置3。默認(rèn)快捷鍵是"ctrl+shift+4"。等同于{?"action":?"newTab",?"index":?3?}。
newTabProfile4:在新標(biāo)簽中打開配置4。默認(rèn)快捷鍵是"ctrl+shift+5"。等同于{?"action":?"newTab",?"index": 4?}。
newTabProfile5:在新標(biāo)簽中打開配置5。默認(rèn)快捷鍵是"ctrl+shift+6"。等同于{?"action":?"newTab",?"index":?5 }。
newTabProfile6:在新標(biāo)簽中打開配置6。默認(rèn)快捷鍵是"ctrl+shift+7"。等同于{?"action":?"newTab",?"index":?6?}。
newTabProfile7:在新標(biāo)簽中打開配置7。默認(rèn)快捷鍵是"ctrl+shift+8"。等同于{?"action":?"newTab",?"index":?7?}。
newTabProfile8:在新標(biāo)簽中打開配置8。默認(rèn)快捷鍵是"ctrl+shift+9"。等同于{?"action":?"newTab",?"index":?8?}。
nextTab:切換到下一個標(biāo)簽頁。默認(rèn)快捷鍵是"ctrl+tab"。
openNewTabDropdown:打開下拉菜單。默認(rèn)快捷鍵是"ctrl+shift+space"。
openSettings:打開設(shè)置。默認(rèn)快捷鍵是"ctrl+,"。
paste:粘貼復(fù)制的文本。默認(rèn)快捷鍵是"ctrl+shift+v"和"shift+insert"。
prevTab:切換到上一個標(biāo)簽頁。默認(rèn)快捷鍵是"ctrl+shift+tab"。
resetFontSize:重置字號。默認(rèn)快捷鍵是"ctrl+0"。
resizePane:調(diào)整面板大小。可選參數(shù):direction,指定調(diào)整的方向,可以是"up", "down", "left", "right",默認(rèn)值是"left"。
resizePaneDown:將面板分界線向上移動。默認(rèn)快捷鍵是"alt+shift+down"。等同于{?"action":?"resizePane",?"direction":?"down"?}。
resizePaneLeft:將面板分界線向上移動。默認(rèn)快捷鍵是"alt+shift+left"。等同于{?"action":?"resizePane",?"direction":?"left"?}。
resizePaneRight:將面板分界線向上移動。默認(rèn)快捷鍵是"alt+shift+right"。等同于{?"action":?"resizePane",?"direction":?"right"?}。
resizePaneUp:將面板分界線向上移動。默認(rèn)快捷鍵是"alt+shift+up"。等同于{?"action":?"resizePane",?"direction":?"up"?}。
scrollDown:向下滾動一行。默認(rèn)快捷鍵是"ctrl+shift+right"。
scrollDownPage:向下滾動一頁。默認(rèn)快捷鍵是"ctrl+shift+pgdn"。
scrollUp:向上滾動一行。默認(rèn)快捷鍵是"ctrl+shift+up"。
scrollUpPage:向上滾動一頁。默認(rèn)快捷鍵是"ctrl+shift+pgup"。
splitHorizontal:水平拆分面板。默認(rèn)快捷鍵是"alt+shift+-"。等同于{?"action":?"splitPane",?"split":?"horizontal"}。
splitVertical:垂直拆分面板。默認(rèn)快捷鍵是"alt+shift+plus"。等同于{?"action":?"splitPane",?"split":?"vertical"}。
splitPane:拆分面板。可選參數(shù):split,可以是"horizontal":水平拆分,"vertical":垂直拆分,或者"auto":自動,默認(rèn)值是自動。index:整數(shù),指定新面板中shell環(huán)境配置在下拉菜單中的序號,注意這個序號是從0開始的,默認(rèn)值是0。profile:字符串,指定新面板中shell環(huán)境配置的GUID或名稱,和?index?同時存在時會忽略?index?參數(shù)。commandline:字符串,使用該參數(shù)指定的命令,會覆蓋配置中的設(shè)置。tabTitle:使用該參數(shù)指定的標(biāo)簽標(biāo)題,會覆蓋配置中的設(shè)置。startingDirectory:使用該參數(shù)指定的起始路徑,會覆蓋配置中的設(shè)置。
switchToTab:切換標(biāo)簽??蛇x參數(shù):index:整數(shù),標(biāo)簽頁的序號,注意這個序號是從0開始的,默認(rèn)值是0。
switchToTab0:切換到0號標(biāo)簽。默認(rèn)快捷鍵是"ctrl+alt+1"。等同于{?"action":?"switchToTab",?"index":?0?}。
switchToTab1:切換到1號標(biāo)簽。默認(rèn)快捷鍵是"ctrl+alt+2"。等同于{?"action":?"switchToTab",?"index":?1?}。
switchToTab2:切換到2號標(biāo)簽。默認(rèn)快捷鍵是"ctrl+alt+3"。等同于{?"action":?"switchToTab",?"index":?2?}。
switchToTab3:切換到3號標(biāo)簽。默認(rèn)快捷鍵是"ctrl+alt+4"。等同于{?"action":?"switchToTab",?"index":?3?}。
switchToTab4:切換到4號標(biāo)簽。默認(rèn)快捷鍵是"ctrl+alt+5"。等同于{?"action":?"switchToTab",?"index":?4?}。
switchToTab5:切換到5號標(biāo)簽。默認(rèn)快捷鍵是"ctrl+alt+6"。等同于{?"action":?"switchToTab",?"index":?5?}。
switchToTab6:切換到6號標(biāo)簽。默認(rèn)快捷鍵是"ctrl+alt+7"。等同于{?"action":?"switchToTab",?"index":?6?}。
switchToTab7:切換到7號標(biāo)簽。默認(rèn)快捷鍵是"ctrl+alt+8"。等同于{?"action":?"switchToTab",?"index": 7?}。
switchToTab8:切換到8號標(biāo)簽。默認(rèn)快捷鍵是"ctrl+alt+9"。等同于{?"action":?"switchToTab",?"index":?8?}。
toggleFullscreen:切換到全屏模式。默認(rèn)快捷鍵是"alt+enter"和"f11"。
find:打開查找工具欄。默認(rèn)快捷鍵是"ctrl+shift+f"。
2、右鍵菜單
如果你經(jīng)常需要從某個特定的文件夾打開終端,那么把在文件管理器的右鍵菜單中加入“在此處打開終端”命令是非常方便的辦法。Windows Terminal從v0.9版本開始支持命令行參數(shù),因此我們可利用這一點在右鍵菜單中加入快捷啟動Windows Terminal的選項,并通過特定的參數(shù)啟動特定的shell環(huán)境。
增加右鍵菜單需要修改注冊表,你可以使用注冊表腳本來修改,或者按下Win+R,輸入 regedit 運行注冊表編輯器直接編輯注冊表。
如下圖所示的右鍵菜單中,“在 Git Bash 中打開”、“在 Linux Shell?中打開”、“在 PowerShell 中打開”可以在Windows Terminal中分別啟動相應(yīng)的shell。

注冊表腳本如下:
Windows?Registry?Editor?Version?5.00
[HKEY_CLASSES_ROOT\Directory\Background\shell\git-bash-wt]
@="在?Git?Bash?中打開"
"Icon"="C:\\Program?Files\\Git\\git-bash.exe"
[HKEY_CLASSES_ROOT\Directory\Background\shell\git-bash-wt\command]
@="C:\\Users\\YOURUSERNAME\\AppData\\Local\\Microsoft\\WindowsApps\\wt.exe?-p?\"PROFILE_OF_GIT_BASH\"?-d?\"%V\""
[HKEY_CLASSES_ROOT\Directory\shell\git-bash-wt]
@="在?Git?Bash?中打開"
"Icon"="C:\\Program?Files\\Git\\git-bash.exe"
[HKEY_CLASSES_ROOT\Directory\shell\git-bash-wt\command]
@="C:\\Users\\YOURUSERNAME\\AppData\\Local\\Microsoft\\WindowsApps\\wt.exe?-p?\"{PROFILE_OF_GIT_BASH}\"?-d?\"%V\""
[HKEY_CLASSES_ROOT\Directory\Background\shell\ps-wt]
@="在?PowerShell?中打開"
"Icon"="powershell.exe"
[HKEY_CLASSES_ROOT\Directory\Background\shell\ps-wt\command]
@="C:\\Users\\YOURUSERNAME\\AppData\\Local\\Microsoft\\WindowsApps\\wt.exe?-p?\"PROFILE_OF_POWERSHELL\"?-d?\"%V\""
[HKEY_CLASSES_ROOT\Directory\shell\ps-wt]
@="在?PowerShell?中打開"
"Icon"="powershell.exe"
[HKEY_CLASSES_ROOT\Directory\shell\ps-wt\command]
@="C:\\Users\\YOURUSERNAME\\AppData\\Local\\Microsoft\\WindowsApps\\wt.exe?-p?\"PROFILE_OF_POWERSHELL\"?-d?\"%V\""
[HKEY_CLASSES_ROOT\Directory\Background\shell\linux-wt]
@="在?Linux?Shell?中打開"
"Icon"="wsl.exe"
[HKEY_CLASSES_ROOT\Directory\Background\shell\linux-wt\command]
@="C:\\Users\\YOURUSERNAME\\AppData\\Local\\Microsoft\\WindowsApps\\wt.exe?-p?\"PROFILE_OF_WSL\"?-d?\"%V\""
[HKEY_CLASSES_ROOT\Directory\shell\linux-wt]
@="在?Linux?Shell?中打開"
"Icon"="wsl.exe"
[HKEY_CLASSES_ROOT\Directory\shell\linux-wt\command]
@="C:\\Users\\YOURUSERNAME\\AppData\\Local\\Microsoft\\WindowsApps\\wt.exe?-p?\"PROFILE_OF_WSL\"?-d?\"%V\""
請注意wt.exe的路徑,必須使用絕對路徑。示例的路徑是通過Windows App Store安裝的默認(rèn)路徑,請將其中的?YOURUSERNAME?改為你的用戶名。
其次是 -p 參數(shù)指定的profile,就是配置文件中相應(yīng)profile的名稱或者GUID,請根據(jù)自己的配置文件修改。
此外,其中的"Icon"指定了菜單項前面顯示的圖標(biāo)所在的路徑,可以指定一個exe文件或ico文件,系統(tǒng)會自動讀取其中的圖標(biāo)。如果你喜歡Windows Terminal的圖標(biāo),可以在GitHub上找到。在Windows?Terminal倉庫中搜索terminal.ico就能找到。注意字符串當(dāng)中的反斜杠"\\"、雙引號"\""需要轉(zhuǎn)義。
右鍵菜單的本質(zhì)是帶參數(shù)執(zhí)行wt.exe,下面介紹wt.exe的命令行參數(shù),格式如下
wt.exe?[terminal_parameters]
[new-tab?[terminal_parameters]]
[split-pane?[-H]|[-V]?[terminal_parameters]]
[focus-tab?[--target,-t?tab-index]|[--next,-n]|[--previous,-p]]
其中[terminal_parameters]:?[--profile,-p?profile-name]?[--startingDirectory,-d?starting-directory]?[commandline]
[terminal_parameters]用于指定打開的shell環(huán)境:--profile,-p 選項指定環(huán)境配置的名字或者GUID;--startingDirextory,-d 選項指定起始工作路徑,覆蓋環(huán)境配置中指定的路徑;commandline 用于指定命令行,同樣會覆蓋環(huán)境配置中指定的命令。
[new-tab?[terminal_parameters]]用于打開一個新的標(biāo)簽頁,后面可以帶[terminal_parameters]參數(shù)指定在新標(biāo)簽頁中啟動的shell配置。
[split-pane?[-H]|[-V]?[terminal_parameters]]用于拆分當(dāng)前面板。-H指定水平拆分,-V指定垂直拆分。后面同樣可以用[terminal_parameters]參數(shù)指定在新的面板中啟動的shell環(huán)境。
[focus-tab?[--target,-t?tab-index]|[--next,-n]|[--previous,-p]]用于切換到指定的標(biāo)簽頁。用[--target,-t?tab-index]指定標(biāo)簽頁的序號,或者用[--next,-n]|[--previous,-p]指定切換到前一個或后一個標(biāo)簽頁。
同理,你可以在配置文件中添加常用配置,并通過添加右鍵菜單的方式方便快捷地啟動它們。如果你經(jīng)常需要ssh到遠(yuǎn)程的服務(wù)器,那么下面的配置會非常適合你:(Windows 10可以安裝OpenSSH,因此沒有wsl的話可以用PowerShell)
{? //?啟動WSL并ssh到指定的服務(wù)器
? ? ? ? "guid": "generate-your-own-guid",
? ? ? ? "name": "ssh to server",
? ? ? ? "commandline": "wsl.exe ssh user@server.com"
}
3、總結(jié)
Windows Terminal尚在預(yù)覽版階段,但目前的使用體驗已經(jīng)非常棒了。對UTF-8的支持、GPU加速的界面渲染、Windows Fluent設(shè)計風(fēng)格、更重要的是它開源免費。終于能夠一改Windows下糟糕的命令行體驗,在圖形化的Windows中打開了一扇特殊的窗口。期待Windows Terminal 1.0版本的正式發(fā)布。