# 使用Oh my posh來美化Terminal Terminal的美化 不只是看起來的好看 更重要的是好操作 - 看起來順眼 - 更好配置操作指令 - git、ssh、python、nodejs、docker 等等環境的運行狀態  ## 運作原理 分為最主要的三步:載入、觸發、渲染 1. 載入: 腳本注入 (Injection) 運行shell時透過初始化的配置文件(.bash_profile/.zshrc/$PROFILE) 載入腳本/程式 2. 觸發: 事件掛鉤(Hooking) 透過shell提供的Hook(類似API) 去監聽、攔截、觸發、覆寫一些行為 像是: - 更改外觀就是透過覆寫shell的繪製過程 - 能看到git狀態 是透過每次按下enter時 觸發腳本 檢查git狀態、更新顯示 3. 渲染: ANSI 轉義序列 (Rendering) - 當狀態更新完畢 會輸出對應的ANSI序列[^ANSI序列] 例如:`\e[32m \ue0b0 \e[0` - 最後整合各個插件的ANSI序列 轉譯為各色背景+圖標的組合 - 最終繪製出自定義的顯示內容 而使用者要做的 就是config配置好 把這工具掛載到shell的初始化上即可 ```mermaid graph LR B[初始化掛載] --> C[觸發 Shell Hook] C --> D[執行插件] D --> E[封裝ANSI] E --> F[渲染] F --> C ``` 整體設計模式為Decoupled Architecture(解耦架構) ## 背景介紹 最初在bash及zsh上 是在終端執行一行一行的腳本來完成簡易的輔助功能 演變成Oh My Zsh(OMZ)這種具有插件功能的工具 透過類似上圖的方式 給單純的終端附加了各種補全、捷徑、文字GUI 等等的互動功能 隨著WSL及跨平台需求增加 後人基於OMZ使用GO語言推出了Oh My Posh(OMP) 透過統一執行各平台編譯好的程式 來解決不同shell有不同腳本程式的問題 核心理念是透過通用的ANSI渲染引擎 達到無論在哪種Shell 只要配置同樣的設定檔 呼叫這個工具 就能達到畫面的統一 **配置起來非常簡潔** 且移植容易 所以選擇使用Oh my posh配置 > 需要更多擴充功能 可再配置OMZ來擴充功能套件 ## windows terminal配置 [^微軟教學] [^美化win] [^美化你的命令行] [^CLI安裝] 主要分為4個步驟: 環境設定、安裝字體、配置設定檔、選主題 ::::spoiler 可選: 安裝powershell 7、更改預設啟動、vscode預設終端 :::info ### 安裝powershell 7 win預設是5.1 新的7.0 主要差異是在速度、跨平臺 安裝方式 win+r輸入`wt` 透過winget安裝 ``` shell winget install Microsoft.PowerShell ``` 此時win+r 輸入`pwsh` 應該會出現 ```shell PowerShell 7.x.x PS C:\Users\xxx> ``` 而輸入`powershell` 執行的就會是舊版 ### 更改預設啟動 在win terminal修改預設啟動PowerShell (7)  ### vscode預設終端 ctrl+shift+p `Terminal: Select Default Profile` 選PowerShell (7)  ::: :::: 以下流程官方doc皆有教學 以最新版為主 ### 1. 安裝[Oh my posh](https://ohmyposh.dev/) 1. win+r輸入pwsh開啟powershell 輸入 `winget install JanDeDobbeleer.OhMyPosh --source winget` 2. 重啟Windows Terminal輸入`oh-my-posh.exe` 有跳出東西就OK了 ### 2. 安裝對應字體 可執行指令安裝: `oh-my-posh font install` 或是從 [Nerd Font](https://www.nerdfonts.com/) 選一個喜歡的下載並安裝 解壓縮後框選所有字體檔案 右鍵"為所有使用者安裝" 重啟terminal 設定>預設值>外觀>字型 選擇安裝的Nerd Font  >[!Note] 為了美化terminal 需要使用該字體的圖標擴充版 稱為Nerd Font(NF) >更祥細的字體補充 [^字體補充] ### 3. 啟動shell時載入oh my posh 目前運行的powershell的設定檔 `Microsoft.PowerShell_profile.ps1` > 其位置可透過 `echo $PROFILE` 查看 去編輯這個檔案即可 這邊使用vscode編輯 `code $PROFILE` 或是記事本編輯 `notepad $PROFILE` 在.ps1中輸入初始化的指令並存檔 [^prompt使用]: ```shell oh-my-posh init pwsh --eval | Invoke-Expression ``` > oh-my-posh init \[shell\] 會根據環境生成指令來初始化 :::spoiler 使用`--eval`速度會較慢 但不用可能出現".ps1檔案無法載入" PowerShell 有4種執行原則: 1. Restricted:所有Script(.ps1) 皆無法執行(預設) 2. AllSigned:所有Script都要經過受信任的發行者簽屬過後才可執行 3. RemoteSigned:異地Script需要簽屬過後才可執行,本機Script可直接執行 4. Unrestricted:無限制,所有Script皆可執行 用系統管理員執行指令將其設定為RemoteSigned即可 [^PS簽章] `> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope LocalMachine` ::: 接著再重啟一次 即可完成 到這邊就OK了  ## 4. 選擇喜歡的主題 首先從官方doc的[Themes頁面](https://ohmyposh.dev/docs/themes)挑一個順眼的主題 記住他的名稱 在我使用的v29.0.1版本 安裝時不再內建主題 需手動配置config 1. 從 [Released](https://github.com/JanDeDobbeleer/oh-my-posh/releases/tag/v29.0.1) 下載themes.zip 並解壓縮到一個地方 (這邊在`%USERPROFILE%`創了資料夾放在裡面 `~/username/ohmyposh/theme`) 2. `code $PROFILE` 編輯 `Microsoft.PowerShell_profile.ps1` ``` 將原本的 oh-my-posh init pwsh | Invoke-Expression 更改成 oh-my-posh init pwsh --config [你的主題資料夾]/[theme名稱].omp.json | Invoke-Expression oh-my-posh init pwsh --config ~/ohmyposh/themes/powerlevel10k_rainbow.omp.json | Invoke-Expression ``` 執行`. $PROFILE`或是重啟terminla 其可完成設定 >[!Note] >其設定檔`xxx.omp.json` 可備份後任意自訂樣式 theme資料夾只是調整好的樣板 > 看到主題改變就完成了  ## Git Bash [^gitbash配置] windows安裝git時 通常會自帶一個bash shell 其配置方法也一樣 參考官方的Linux配置教學即可 如果已經如上文配置powershell 只要修改`~/.bash_proflie` 加入設定檔位置 重新啟動即可: ```shell eval "$(oh-my-posh --init --shell bash --config [你的主題資料夾]/[theme名稱].omp.json.)" ```  ## Ref 其他相關知識 終端機 [^ANSI序列]: [ANSI跳脫序列](https://zh.wikipedia.org/zh-tw/ANSI%E8%BD%AC%E4%B9%89%E5%BA%8F%E5%88%97) [^美化win]: [美化Windows Terminal](https://hackmd.io/@Yuuzi/wt) [^美化你的命令行]: [美化你的命令行:使用 PowerShell 7 和 Oh My Posh 的终极指南 - F4lc0n的文章 - 知乎](https://zhuanlan.zhihu.com/p/690118041) [^微軟教學]: [微軟教學課程 - 使用 Oh My Posh 設定 PowerShell 或 WSL 的自訂提示](https://learn.microsoft.com/zh-tw/windows/terminal/tutorials/custom-prompt-setup) [^字體補充]: [写代码用哪种字体看起来最舒适? - Snowflyt的回答 - 知乎](https://www.zhihu.com/question/32058777/answer/3561707776) [^PS簽章]: [如何對PowerShell腳本檔案進行數位簽章](https://blog.miniasp.com/post/2024/09/07/How-to-digitally-sign-PowerShell-script-files) [^prompt使用]: https://ohmyposh.dev/docs/installation/prompt [^gitbash配置]: [用 oh-my-posh 美化 Git bash](https://blog.awin.one/posts/2022/%E7%94%A8-oh-my-posh-%E7%BE%8E%E5%8C%96-git-bash/) [^CLI安裝]: [透過 CLI 的方式,來安裝 Windows Terminal + PowerShell 7 + Oh My Posh](https://eandev.com/post/software/windows-terminal-powershell-7-oh-my-posh-setup/) [^gitbash問題]: [Git for Windows (git-bash with mintty) badly handles CTRL+c / Break](https://www.reddit.com/r/git/comments/9aeq85/git_for_windows_gitbash_with_mintty_badly_handles/) [^winpty流程圖]: [Cygwin系列(十一):折腾终端2](https://silaoa.github.io/2020/2020-01-13-Cygwin%E7%B3%BB%E5%88%97%EF%BC%88%E5%8D%81%E4%B8%80%EF%BC%89%EF%BC%9A%E6%8A%98%E8%85%BE%E7%BB%88%E7%AB%AF2.html)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up