Last Updated on 2021-09-24 by Clay
在習慣了有著豐富顏色的 Linux 終端機後(我曾經花費了很大力氣調整得很漂亮 XDD),猛然切換到了全然白底的 Mac 預設終端機 —— Terminal.app,真的有種『天哪怎麼又要重新設定』...... 的崩潰感。
來看個簡單的比對,我在遠端 Linux 伺服器上的目錄底下有著漂亮的顏色與檔案排序:
反觀我的 MacBook Pro:
一言以敝之,我們需要進行許多調整,來讓 Mac 預設的終端機更加美觀。以下,我簡單分享我配置的過程。或許哪天,我可以回來參考我自己的配置也說不定。
以下分成幾個部分介紹:
- 終端機背景、字體
- 終端機提示符號 PS1
- 終端機 ls 指令顯示的各種檔案顏色(256 色)
終端機背景、字體
首先,我們可以透過簡單的圖形化介面進行最基本的設定。開啟終端機後,你應該能在右上角看見終端機的選項:
或者,你也可以用 command + ,
的快捷鍵開啟。開啟後,你應該會看到許多關於終端機外觀設定的選項。
在這裡,你可以選擇預設要開啟的終端機、調整終端機的文字顏色大小、ANSI 的基礎顏色、終端機光標顏色與形狀 ...... 等等。
設定完成之後,應該會有你希望擁有的基本終端機外觀。
(備註:會有一段 The default interactive shell is now zsh ... 的提醒,是因為我將預設的腳本語言從 zsh 改成了 bash。如果想要隱藏這段提醒,可以參考我的另外一篇文章:[MacOS] 如何隱藏終端機 “To update your account to use zsh, please run `chsh -s /bin/zsh`. …” 的訊息)
終端機提示字符 PS1
在 Mac OS 當中,Terminal 的使用者名稱是沒有顏色的。但是我們可以透過調整 PS1,來讓我們的使用者名稱加上顏色、並能顯示目前所在的目錄位置(這是個很棒的功能)。
如果在你的使用者目錄底下,沒有 .bash_profile 這一檔案的話,可以使用編輯器直接新增並寫下你要的設定。(不同的腳本語言會有不同的設定檔,要注意一下)
比方說我使用 vim 編輯器,直接使用以下指令便可編輯:
vim ~/.bash_profile
然後在這份檔案中,試著設定不同的 PS1:
export PS1="My name is Clay: "
存檔離開,這時候要使用 source
指令讓 ~/.bash_profile 的設定生效:
source ~/.bash_profile
你應該會看到以下終端機畫面:
然後我們一樣可以輸入指令。改變的就只有終端機前面提示的名稱。
那要如何設定成有顏色的名字 + 提示當前所在路徑呢?我們需要對顏色的代碼有點基礎的認識。
在終端機中我們可以簡單設定的顏色的數種,依照類別可以分為
- 特效
- 文字顏色
- 背景顏色
而在終端機中指定文字,需要使用以下語法:
\[\e[特效;文字顏色;背景顏色\]你要設定顏色的文字\[\e[m\]
而不論是特效、文字顏色、背景顏色,都是使用顏色碼來指定。以下紀錄簡單的顏色碼。
特效顏色碼
文字顏色碼
背景顏色碼
獲取不同資訊的字符
而除了顏色之外,也有自動獲取像是日期、時間等的格式字符可以使用:
標籤 | 用途 |
---|---|
\d | 日期 |
\h | 主機名稱 |
\n | 換行 |
\t | 時間 |
\u | 使用者名稱 |
\W | 當前工作目錄 |
\w | 完整當前工作目錄 |
比方說,我可以使用 \u 取得使用者名稱、再使用 \w 取得當前的工作目錄。
我們再次嘗試修改 ~/.bash_profile 這份檔案。
export PS1="\[\e[1;32m\]\u@MacBook-Pro\[\e[m\]:\[\e[1;34m\]\w\[\e[m\]$ "
同樣,儲存退出後使用以下指令讓設定生效(這個指令之後還會用上許多次):
source ~/.bash_profile
Output:
這樣一來就美觀多了。
終端機 ls 指令顯示的各種檔案顏色(256 色)
配置到現在,我們在終端機中的使用者名稱看起來已經有顏色、也能顯示出目前所在的目錄路徑。然而,若是使用 ls
指令,則會發現各種資料夾、檔案仍然是白色的。
那麼下一步,就是調整我們 ls
指令顯示的檔案顏色啦!
首先,我們需要安裝 coreutils 工具來讓終端機能夠自己配置不同文件的顏色。(若需要啟用 Homebrew,可以參考:[MacOS] 透過 brew 指令透過終端機下載套件)
而下載的 ~/.dircolors 則是我推薦的一套顏色設定配置,若有想要修改的顏色同樣可以編輯該設定檔。
brew install coreutils
wget https://raw.github.com/trapd00r/LS_COLORS/master/LS_COLORS -O ~/.dircolors
下載好後,再次修改 ~/.bash_profile,在裡頭寫下:
# GDIRCOLORS if brew list --formula | grep coreutils > /dev/null ; then PATH="$(brew --prefix coreutils)/libexec/gnubin:$PATH" alias ls="ls --show-control-chars --color=auto --sort=extension" eval `gdircolors -b $HOME/.dircolors` fi
然後儲存關閉、再次使用以下指令讓設定生效:
source ~/.bash_profile
接著使用 ls 指令,應該能看到不同的檔案都有著各自的顏色了:
接著,如果覺得有任何文件的顏色自己不喜歡,可以使用以下指令編輯設定檔:
vim ~/.dircolors
Output:
可以將其修改成自己喜歡的顏色,在終端機中也會即時地顯示出來。在這裡,我們以資料夾 DIR 為例:
修改成了藍色後,儲存關閉。再次使用 source ~/.bash_profile
讓顏色設定生效,再次查看當前目錄顏色。
可以發現,資料夾真的變成藍色的了!
到這邊為止,我的配置也差不多結束了。或許大家也可以嘗試著設置看看不同的配置。
解決 ~/.bash_profile 載入緩慢的問題(2020/11/21 更新)
雖然看起來漂亮地讓終端機有了色彩,但很快地,我發現只要嘗試著開啟新的終端機,載入 ~/.bash_profile 的速度異常緩慢,甚至需要到三四秒才能開啟。
經過測試發現,應是以下的指令太過冗余:
# GDIRCOLORS if brew list --formula | grep coreutils > /dev/null ; then PATH="$(brew --prefix coreutils)/libexec/gnubin:$PATH" alias ls="ls --show-control-chars --color=auto --sort=extension" eval `gdircolors -b $HOME/.dircolors` fi
基本上,只要使用到 Homebrew 指令的通通都會花費個幾秒,我們可以將指令修改得更快載入。
首先,確認 brew --prefix coreutils
指令的路徑:
brew --prefix coreutils
Output:
/usr/local/opt/coreutils
在我的裝置中,顯示出的便是以上的路徑。當然,你有可能和我的不一樣。
將此一路徑替換掉 ~/.bash_profile 中的 $(brew --prefix coreutils),並刪去判斷 coreutils 工具是否存在的指令。最終的設定配置如下:
# GDIRCOLORS PATH="/usr/local/opt/coreutils/libexec/gnubin:$PATH" alias ls="ls --show-control-chars --color=auto --sort=extension" eval `gdircolors -b $HOME/.dircolors`
這樣一來開啟終端機的速度就會很快了。
References
- https://medium.com/@charlesdobson/how-to-customize-your-macos-terminal-7cce5823006e
- https://code.tutsplus.com/tutorials/how-to-customize-the-command-prompt--net-20586
- https://github.com/gibbling/dircolors
- https://stackoverflow.com/questions/59428502/tree-command-on-os-x-bash