[皮毛筆記] 如何在vs code使用多種shell於終端機上

Ellen C.C. Liu
6 min readFeb 22, 2019

--

vs code為什麼好用?

因為它直接整合了許多開發時會用到的功能,不需要使用某種功能就開啟一個軟體,省很多切換視窗的時間對工程師來說也挺吸引的。

vs code其實內建了終端機(Terminal)功能,一些簡單的指令可以直接在vs code上操作就好。

(如下圖,可以直接在vs code底下開啟終端機)

在vs code上開啟終端機

方法一 : 快捷鍵 ctrl + ~
方法二 : 上方選單 檢視 >> 終端機

這裡開啟的就是windows作業系統內建的cmd,也就是我們俗稱的命令提示字元,如果你的電腦是Win 10,有可能一打開是運行PowerShell

在終端機上設定使用git bash

有用Git的人一般也會用到git bash,雖然一樣是下指令,但git bash跟windows內建的命令提示字元還是不一樣,習慣用git bash的人同樣可以把它整合進vs code的終端機來用。

Step1 : 檔案 >> 喜好設定 >> 設定

Step2 : 開啟功能的設定頁面,選擇左邊選單 功能 >> 終端機

找到以下這段,將shell的路徑改為git bash的路徑

C:\Program Files\Git\bin\bash.exe

當然,在你做這件事之前請確保你的電腦有裝GIT,否則系統不會找到git bash。

另一個終端機設定的方法

Step1 : 點選右上方的選單 (…),選擇 開啟settings.json

如果你沒有設定過的話,右邊那個區塊應該是空白的

(如下圖,左邊是預設的設定,右邊是使用者自訂的設定,所以右邊撰寫的設定來覆寫左邊的設定,這樣的話預設的設定都不會被修改到)

Step2 : 接下來在右邊加入

"terminal.integrated.shell.windows": "C:\\Program Files\\Git\\bin\\bash.exe"

Step3 : 然後存檔離開,重新開啟終端機,就可以看到bash並且使用它了。

在終端機上切換其他的shell【重要!!】

如下圖,不需要重新開啟一次vs code或終端機,直接在指令列打shell的名字(例如:powershell)就可以直接切換到該shell使用。

你可以從bash轉成powershell,也可以從powershell轉成cmd,也可以再從cmd轉回bash,只要直接打 powershell/cmd/bash 就好了

同場加映 : 在終端機上使用cmder

許多工程師不喜歡windows作業系統內建的簡陋命令提示字元,甚至是PowerShell,所以會去裝這個感覺起來比較有Linux風格的指令工具,那就是 cmder ,而且cmder當然也可以在vs code的終端機裡用。

簡單說一下,cmder是不需要安裝的,直接下載後解壓縮就可以用,有min和full兩個版本,full版包含一些GIT的工具,如果確定電腦已經安裝了GIT的話,直接下載min版來用就可以了。

cmder在vs code裡的設定方式比較不同,也比較麻煩,按照前面的設定方式,只要把cmder的執行路徑設定上去就可以了嘛!但cmder如果這樣設定,它會直接打開cmder程式,而不是在vs code的終端機內執行。

它會直接幫你開一個cmder

接下來再度打開剛才的使用者設定 settings.json,加入以下設定:

// "terminal.integrated.shell.windows": "C:\\Program Files\\Git\\bin\\bash.exe", 
"terminal.integrated.shell.windows": "C:\\WINDOWS\\System32\\cmd.exe",
"terminal.integrated.shellArgs.windows": [
"/k G:\\cmder\\vendor\\init.bat"
],

把剛才設定 bash 的那行註解掉,然後添加下面兩行,以 cmd 當殼,將路徑指向cmder內vendor資料夾裡面的一個啟動檔 init.bat

【重要】注意!!!必須以 cmd 當殼,用 bash 會失敗!

設定完成後將vs code關掉,再重新開啟一次。這時候,vs code的終端機運行的就是 cmder,只是右上顯示的還是 cmd

設定完成後,依然可以用 powershell/ cmd/ bash等指令切換到相對應的shell,但是打 cmder 卻回不來了。這時候建議直接用新增(ctrl + shift + `)的方式增加一個終端機使用,這樣就可以愉快的在其他的shell中切換,始終保留第一個終端機運行cmder。

--

--