# 在 Ubuntu 中,我選擇用 zsh 而不是原生 shell ## 1 它有什麼好處? 原生的 shell 是 bash 但我認為它有太多的限制,重點是看起來有夠土,選擇使用 zsh 對眼睛更為友善,並且還有以下的優點: - **互動效率高**:補全更聰明、支援萬用字元、通配更強、歷史搜尋方便。 - **可擴充**:oh-my-zsh / powerlevel10k / 各式 plugin(git、z、fzf…)一鍵上手。 - **長期維護友善**:把常用 alias / PATH / 環境變數集中在 `~/.zshrc`,讓操作能夠跨專案一致。 ## 2 要怎麼安裝與使用? ### 2.1 安裝 zsh ```bash sudo apt update sudo apt install -y zsh ``` - 第1行:更新套件索引,確保拿到最新的套件版本資訊。 - 第2行:安裝 zsh;`-y` 自動回答「Yes」,避免中途卡住。 ### 2.2 將 zsh 設為預設 shell ```bash chsh -s "$(which zsh)" ``` - `chsh -s`: 變更預設登入 shell。 - `$(which zsh)`: 取得 zsh 的完整路徑(通常是 `/usr/bin/zsh`)。 > 執行後*登出並重新登入*,或重開終端,就會以 zsh 起跑。 > 檢查方式:`echo $SHELL` 應該會回傳 `.../zsh`。 ### 2.3 安裝 Oh My Zsh ```bash export RUNZSH=no sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" exec zsh -l ``` - 第1行:設定安裝完成*先不要自動啟動 zsh*(避免覆蓋)。 - 第2行:以 `sh -c` 執行官方安裝腳本;`curl -fsSL` 代表失敗安靜、跟隨轉址、輸出到 stdout。 - 第3行:以 login shell 方式啟動 zsh,套用剛安裝的預設設定。 > 若你曾安裝過:腳本會提示資料夾已存在,不必重複安裝。要重置就先備份 `~/.zshrc` 與 `~/.oh-my-zsh`,再重新跑上面三行。 ## 3 編輯 `.zshrc`(追加設定,不要覆蓋) > **提醒**:不要整份覆蓋 `.zshrc`,因為裡面可能已經有重要設定(例如 ROS 或 Powerlevel10k)。 > 請先備份: > > ```bash > cp ~/.zshrc ~/.zshrc.backup.$(date +%F-%H%M) > ``` 想要編輯 `.zshrc` 有兩種方法: - **方法 1:用 nano(CLI 簡單)** ```bash nano ~/.zshrc ``` 存檔:Ctrl+O → Enter,離開:Ctrl+X。 - **方法 2:用 VS Code(GUI,直覺)** ```bash code ~/.zshrc ``` 前提:已安裝 VS Code,且 `code` 指令可用。 ### 3.1 建議追加的設定(貼在 `source $ZSH/oh-my-zsh.sh` **下面**) ```bash # === 路徑與常用環境 === export PATH="$HOME/.local/bin:$PATH" # 讓 pip --user / 自行安裝的指令能被找到 export EDITOR="code --wait" # 預設編輯器:VS Code,--wait 讓命令列流程可控 # === 常用 alias(依你日常調整)=== alias ll='ls -alF' # 長列表+明確型別 alias gs='git status' # Git 常用縮寫 alias gc='git commit' # Git 常用縮寫 alias gp='git push' # Git 常用縮寫 ``` 修改後記得重新載入: ```bash source ~/.zshrc ``` ## 4 安裝 fzf(模糊搜尋工具) 很多文章直接寫 `plugins=(git fzf)`,但要注意:**fzf 並不是 zsh 內建功能**,需要額外安裝。 ```bash sudo apt install -y fzf ``` 安裝後,建議再補上 **快捷鍵綁定**(追加到 `.zshrc`,放在 oh-my-zsh 後面): ```bash # === fzf 鍵綁定(↑ 搜歷史、Ctrl+T 增強)=== if [ -f /usr/share/doc/fzf/examples/key-bindings.zsh ]; then source /usr/share/doc/fzf/examples/key-bindings.zsh fi ``` 檢查是否成功: ```bash 在鍵盤上直接輸入 Ctrl+T # 應顯示 fzf-file-widget ``` --- ## 5 讓你看 terminal 看爽爽 — Powerlevel10k 主題 > 想要圖示、git 狀態、執行時間都即時顯示,且極快: ```bash # 安裝 MesloLGS NF 字型(P10k 推薦字型;換到終端機字型設定) sudo apt install -y fonts-powerline # 安裝 p10k git clone --depth=1 https://github.com/romkatv/powerlevel10k.git $ZSH/custom/themes/powerlevel10k # 啟用主題(編輯 ~/.zshrc) sed -i 's/^ZSH_THEME=.*/ZSH_THEME="powerlevel10k\/powerlevel10k"/' ~/.zshrc # 套用設定嚮導 exec zsh -l p10k configure ``` - 第1行:安裝字型,避免亂碼。 - 第2行:抓 p10k 主題到 oh-my-zsh custom 目錄。 - 第3行:把主題切到 p10k。 - 第4\~5行:重啟 zsh,跑嚮導,互動式選擇你喜歡的樣式。 ## 6 使用方式(日常最有感的 5 招) 1. **Ctrl+R**:在歷史指令中用 fzf 互動式搜尋,回車即執行。 2. **Ctrl+T**:在目前資料夾快速挑檔案,回車貼到命令列(需 fzf 已安裝)。 3. **alias**:`ll`、`gs`、`gc`、`gp` 讓 git 操作更順。 4. **快速補全**:打 `git ch<Tab>` → 提示 `git checkout`。 5. **歷史容量+搜尋**:做研究常常會反覆用長指令(colcon、docker、ros2),歷史越多越好找。 ## 7 檢查與評估(如何「看得出來」有沒有設定好) ```bash echo $SHELL # 應該顯示 /usr/bin/zsh zsh --version # 應該 ≥ 5.8 time zsh -i -c exit # 啟動耗時(目標 < 0.20s) type ll gs # 檢查 alias 是否生效 bindkey '^T' # 確認 Ctrl+T 是否綁到 fzf print -r -- $PATH | tr ':' '\n' # 確認 ~/.local/bin 是否在 PATH 前段 ``` ## 8 疑難排解 - **`chsh -s` 沒效**:請**登出並重新登入**,或用 `echo $SHELL` 驗證;必要時 `sudo usermod -s /usr/bin/zsh "$USER"` 後再 relogin。 - **亂碼/方塊字**:終端機字型改成 **MesloLGS NF** 或其他 Nerd Font;或 `sudo apt install fonts-powerline`。 - **啟動很慢**:關閉不必要插件或回到簡單主題;用 `zsh -x` 追慢點。 - **fzf 快捷鍵無效**:確認 `fzf` 已安裝,並且 `.zshrc` 有正確載入 `key-bindings.zsh`。 ## 9 移除 / 回退(知道怎麼撤銷才放心) ```bash # 回到 bash chsh -s /bin/bash # 刪除 oh-my-zsh(先備份 .zshrc) cp ~/.zshrc ~/.zshrc.bak.$(date +%F-%H%M) rm -rf ~/.oh-my-zsh # 想連 zsh 一起移除(通常不需要) sudo apt purge -y zsh ``` --- 希望我的內容對你有所幫助,想看到更多內容歡迎追蹤我的 IG、Threads 等平台。 Threads:[@minimalist_shine](https://www.threads.com/@minimalist_shine) IG:[@minimalist_shine](https://www.instagram.com/minimalist_shine/)
×
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