①②⑧ Mac 的 Git 自訂樣式

以 ohmyzsh 設定 Zsh 的外觀並顯示當前所在的 Branch

Min
6 min readFeb 16, 2024

這次的設定想要滿足三個需求:

  • 將全白的 terminal 環境換成更好辨識的顏色、配置
  • 在提示行不要顯示全部的路徑,僅顯示當前資料夾
  • 顯示目前在 git 的哪一個分支底下

參照此篇文章的方法,略作修改:

最後達成想要的樣子:

還有會變色的箭頭,跟打叉!

步驟

在已經安裝 zsh 的情況下,用以下指令安裝 ohmyzsh:

wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh
收到非常繽紛的迎接畫面

接著,刪除現有的 ohmyzsh 主題檔案 robbyrussell:

rm -rf ~/.oh-my-zsh/themes/robbyrussell.zsh-theme

再創建新的同名主題檔案以替換掉它:

vim ~/.oh-my-zsh/themes/robbyrussell.zsh-theme

vim 打開了檔案之後,輸入以下配置:

NEWLINE=$'\n'
PROMPT="%(?:%{$fg_bold[green]%}➜ :%{$fg_bold[red]%}➜ )"
PROMPT+=' %{$fg[cyan]%}[$%1~]%{$reset_color%} $(git_prompt_info) ${NEWLINE}'
ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg_bold[blue]%}git:(%{$fg[red]%}"
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%} "
ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[blue]%}) %{$fg[yellow]%}✗"
ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg[blue]%})"

解釋

換行

NEWLINE=$'\n'

從新的一行開始。

顯示上一個命令的退出狀態

PROMPT="%(?:%{$fg_bold[green]%}➜ :%{$fg_bold[red]%}➜ )"

根據上一個命令的退出狀態,顯示不同顏色的箭頭。

  • 如果上一個命令成功執行,提示符將是綠色的 ➜
  • 否則,它將是紅色的 ➜
像這裡,一開始前面沒問題是綠色箭頭,但發生合併衝突之後的箭頭就變成紅色的

指定目前 working directory 的路徑只顯示當前資料夾

PROMPT+=' %{$fg[cyan]%}[$%1~]%{$reset_color%} $(git_prompt_info) ${NEWLINE}'

一般顯示完整路徑的話,要在顏色後方的中括號裡面填寫$PWD 。改成%1~ 只會顯示當前資料夾的名稱。

後方則是 Git 的提示資訊,也就是當前分支,並在最後加上新行。

設定 Git 提示資訊

ZSH_THEME_GIT_PROMPT_PREFIX="%{$fg_bold[blue]%}git:(%{$fg[red]%}"
ZSH_THEME_GIT_PROMPT_SUFFIX="%{$reset_color%}"

第一行設定 Git 資訊的前綴:%{$fg_bold[blue]%}git:(%{$fg[red]%} :

  • %{$fg_bold[blue]%}: 將文字顏色設定為加粗的藍色。
  • git:(: 這是直接顯示的字串。
  • %{$fg[red]%}: 接下來的文字,也就是 Git 分支名稱,設定為紅色。

第二行設定 Git 資訊的後綴:%{$reset_color%} :

  • %{$reset_color%}: 重設上方設定的文字顏色回到預設值,以免後面的文字都變成這樣。
  • 空格 : 結尾添加的空格,用於分隔 Git 提示和後續的命令提示符元素。
可以看到藍色其實是紫色?後面的括號與 ✗ 在下面兩行設定

顯示 repository 中是否有未提交的更改

ZSH_THEME_GIT_PROMPT_DIRTY="%{$fg[blue]%}) %{$fg[yellow]%}✗"
ZSH_THEME_GIT_PROMPT_CLEAN="%{$fg[blue]%})"

兩行都有的 %{$fg[blue]%}) 用來設定後括號 ) 的顏色。

第一行:當 git repository 有未提交的更改時,顯示一個黃色的 ✗。

第二行:當 git repository 是乾淨的,裡面沒有未提交的更改時,只顯示後括號。

儲存以上內容,離開 vim 編輯模式後,在命令列輸入:

source ~/.zshrc

更新設定後,就會把剛剛的改變呈現出來囉!

除了有清楚的提示行之外,查找資料時也會把資料夾變成青色,跟檔案做區別。可以參考 ohmyzsh 的 github ,選擇自己喜歡的主題:

謝謝收看!

--

--