Cutom Prompt Message

這邊說的 Prompt Message 是指什麼? 其實就在說當你打開指令模式時 (e.g. cmd, powershell, bash, etc…) 在你輸入指令的那前面一段顯示,通常預設會顯示當前的路徑,但你應該看過不少人把這段文字換成很多酷炫的樣式,通常你會在 Linux 使用者的電腦中看到這樣客製化的命令視窗,這篇文章就是要紀錄 Windows 的環境下如何作到客製話的命令視窗。這邊會以 PowerShell 為主要紀錄環境 CMD 也可以作到一樣的效果,只是我目前的工作環境皆已換成 PowerShell 來操作。

PowerShell Profile

基本上 PowerShell 也會有所謂的 profile 檔案,這個檔案相信對 Linux 的使用者肯定不陌生,而這個 profile 也是會分系統讀取,以及個別使用者的 profile ,當然位置會放在不同的地方,而且依據 PowerShell 版本的不同放置位置也會不同,而這篇主要是把這種客製化設定放在使用者層級。

Prompt function

不管是 5.x 或是 7.x 的版本,在 prompt 的異動上其實都一樣,差別就只有 profile 檔案位置的不同,所以以下就統一舉例說明。

ps. 但是要注意 5.x 跟 7.x 有些語法是有差異的,不能直接把兩者的 code 直接複製貼上

想要更改輸出訊息就直接重新定義 function prompt 就好,這個方法名稱不能換,因為系統預設就是會呼叫這個函式來組成輸出的樣式,但是因為沒有被保護所以可以讓我們直接複寫它。

1
2
3
function prompt {
    "PS: $(get-date)>"
}

或是者稍微來點變化的版本

1
2
3
4
5
function prompt {
    # foregroundcolor 決定字體的顏色, backgroundcolor 也是可以同時設定的
    Write-Host ("PS " + $(get-date) +">") -nonewline -foregroundcolor Red -backgroundcolor Green
    return " "
}

成果大概長這樣~ 所以說這個配色怎麼配是很吃個人美感的… customPromptColor01

Custom Prompt with posh-git

相信很多開發者們的 prompt 已經被不少工具程式調過了,至少很多人應該都裝過 posh-git 這套在 Windows 的 PowerShell 上超好用的 git 套件,而剛好他有一個動作就是調整 prompt 樣式,預設會長以下這樣:

posh-git-style

若這個時候沒有把他的異動納入,直接複寫 prompt 方法的話,那他為你做的調整也會付諸東流,幸好這款套件做的相當齊全,你可以用他提供的變數與方法,在他的基礎上做調整會讓這一切很簡單。

1
2
3
4
5
function prompt {
    $GitPromptSettings.DefaultPromptAbbreviateHomeDirectory = $true    
    $prompt += & $GitPromptScriptBlock
    if ($prompt) { "$prompt " } else { " " }
}

若你跟我一樣很討厭一打開就直接亮出系統預設的位置在哪裡的話補上第一行的設定 $GitPromptSettings.DefaultPromptAbbreviateHomeDirectory = $true 實際跑過一遍你會知道效果,影響不大但就是會舒服一點。

這邊分享一下我在 PowerShell 7.x 的設定成果:

my-custom_style

my gist

Reference