在 RockyLinux 測試 zsh。目前比較常見的,還是使用 bash,如果要測試 zsh,需要另外安裝。
安裝
dnf -y install zsh
修改預設的 shell
chsh -s /bin/zsh
基本的設定檔
可直接跳到下面的 Oh My Zsh
# 1. 基本環境
export LANG=en_US.UTF-8
export EDITOR=vim
export PATH="/usr/local/bin:$PATH"
# 2. Prompt 設定
PROMPT='[%*]%n@%m %~$ '
# 3. Alias 常用指令
alias ll='ls -lh'
alias la='ls -la'
alias ..='cd ..'
alias gs='git status'
# 4. 歷史設定
HISTSIZE=5000
SAVEHIST=5000
HISTFILE=~/.zsh_history
setopt share_history # 多個 zsh session 共享歷史
# 5. 自動補全 & 修正
autoload -Uz compinit && compinit
setopt correct # 拼字錯誤自動建議
setopt autocd # 輸入資料夾名稱自動 cd
setopt nocaseglob # 補全時忽略大小寫
# 6. 補全行為微調
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
功能有
乾淨的 prompt →
[時間]使用者@主機 當前路徑$常用 alias →
ll,la,gs,..歷史 → 儲存 5000 筆並共享不同視窗
自動補全 → tab 補全,支援大小寫不敏感
錯字修正 & auto cd → 輸入資料夾名稱會自動進去
Oh My Zsh
Oh My Zsh 是 zsh 常見的 plugin 管理工具,可安裝多個 plugin 擴充 zsh 的功能,但也要注意,載入越多 plugin 會讓 zsh 啟動變慢。
安裝
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
常見的 theme 工具是 Powerlevel10k,但這邊不使用,直接用基本的 Prompt
修改 ~/.zshrc 增加以下這個部分,然後就能將一些不同用途的設定檔分開
for file in .zshrc_*;
do source $file;
done
增加常用 plugins
安裝
cd $ZSH/custom/plugins
# 安裝 zsh-autosuggestions
git clone https://github.com/zsh-users/zsh-autosuggestions.git
# 安裝 zsh-syntax-highlighting
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git
# zsh-completions
git clone https://github.com/zsh-users/zsh-completions
設定檔
~/.zshrc_basic
# 1. 指定 Oh My Zsh 安裝路徑
export ZSH="$HOME/.oh-my-zsh"
# 3. Plugins
# git → git alias & 補全
# zsh-autosuggestions → 歷史自動建議
# zsh-syntax-highlighting → 命令語法高亮
# history-substring-search → 部分字串歷史搜索
# extract → 快速解壓縮
plugins=(
git
zsh-autosuggestions
zsh-syntax-highlighting
zsh-completions
history-substring-search
extract
colored-man-pages
z
)
# 4. 啟動 Oh My Zsh
source $ZSH/oh-my-zsh.sh
# 5. PATH & 編輯器
export PATH="/usr/local/bin:$PATH"
export EDITOR=vim
export LANG=en_US.UTF-8
# 6. Alias 常用指令
alias ll='ls -lh'
#alias la='ls -A'
alias la='ls -la'
alias ..='cd ..'
alias gs='git status'
alias gp='git push'
alias gd='git diff'
# 7. 歷史設定
HISTSIZE=5000
SAVEHIST=5000
HISTFILE=~/.zsh_history
setopt share_history # 多個 zsh session 共享歷史
# 8. 自動補全 & 行為優化
autoload -Uz compinit && compinit
setopt correct # 拼字錯誤自動建議
setopt autocd # 輸入資料夾名稱自動 cd
setopt nocaseglob # 補全大小寫不敏感
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
另外做一個 ~/.zshrc_prompt
#PROMPT='%F{green}[%D{%H:%M}]%f%F{yellow}%n@%m%f %F{blue}%~%f$ '
#PROMPT='%F{green}[%D{%H:%M}]%f%F{yellow}%n@%m%f %F{blue}%~%f${git_prompt_info} $ '
autoload -Uz vcs_info
precmd() { vcs_info }
zstyle ':vcs_info:git:*' formats '(%b)'
PROMPT='%F{blue}[%D{%H:%M}]%f%F{green}%n@%m%f %F{magenta}%~%f${vcs_info_msg_0_} $ '
增加功能,區分本地跟遠端的 ssh
Zsh / Bash 都可以靠環境變數來判斷:
本地登入 ->
SSH_CONNECTION/SSH_TTY不存在遠端登入 (SSH) ->
SSH_CONNECTION或SSH_TTY存在
if [[ -n "$SSH_CONNECTION" ]]; then
HOST_STYLE="%F{red}@%m%f(ssh)"
else
HOST_STYLE="%F{yellow}@%m%f"
fi
PROMPT='%F{blue}[%D{%H:%M}]%f%F{green}%n%f'"$HOST_STYLE"' %F{magenta}%~%f${vcs_info_msg_0_} $ '
重新登入後,就可以使用 zsh
extract plugin
extract 定義了一個名為 extract 的函數,用於解壓縮你傳遞給它的檔案,並支援多種檔案類型。
使用方式為 extract 檔案名稱
不需要知道具體的解壓縮命令,只需執行 extract 就可以解壓大部分常見檔案,直接輸入 x 檔案名稱 也可以
z plugin
Usage: z [OPTION]... [ARGUMENT]
Jump to a directory that you have visited frequently or recently, or a bit of both, based on the partial
string ARGUMENT.
With no ARGUMENT, list the directory history in ascending rank.
--add Add a directory to the database
-c Only match subdirectories of the current directory
-e Echo the best match without going to it
-h Display this help and exit
-l List all matches without going to them
-r Match by rank
-t Match by recent access
-x Remove a directory from the database (by default, the current directory)
-xR Remove a directory and its subdirectories from the database (by default, the current directory)
autojump
z 是用 shell script 實作,autojump 是 python,z 的速度比較快,且內建於 zsh。一般建議就直接使用 z,如果要使用 autojump,需要做另外的設定。
安裝
cd $ZSH/custom/plugins
# 安裝 autojump
git clone https://github.com/wting/autojump.git
注意 autojump 需要另外安裝套件
dnf -y install autojump
因為 autojump 只有提供 bash 版本的初始化 script
/usr/share/autojump/autojump.bash
現在要使用 zsh,故要另外產生一個 zsh 版本的初始化
到 autojump 原始的 github 網頁取得 autojump.zsh
把 autojump.zsh 放到 /usr/share/autojump/autojump.zsh
修改設定檔
plugins=(
autojump
)
# Autojump 初始化
# 確認 autojump 安裝後再 source
if [ -f /usr/share/autojump/autojump.zsh ]; then
source /usr/share/autojump/autojump.zsh
fi
# 任意切換目錄
cd ~/download/dir1
cd ~/download/dir2
# 檢查 autojump
j -s
# autojump
j dir1