Git Bash + Zsh + Powerlevel10k 集成方案 (跨平台)
📌 概述
本文旨在 Windows 平台上基于 Git Bash 构建一套类 Unix 的高效终端环境。通过集成 Zsh (Z Shell)、Oh My Zsh 框架及 Powerlevel10k 主题,解决原生 Git Bash 功能单一、缺乏语法高亮与自动补全等痛点,并实现跨平台(Windows/Linux/Android)的配置统一。
如果目标平台是windows,则需要使用gitbash,不建议用msys2作为主要的bash!因为windwos上配置的环境变量在msys2没法使用需要重新配置,容易出现一些问题。但是gitbash本身不支持一些包命令操作和一些快捷的命令,所以需要提前安装好msys2,msys2自带了pacman包管理器,可通过
pacman -Sy tree安装tree工具等…,至于如何在gitbash上使用msys2自带的pacman就很简单了,只需要在windows上配置msys2的环境变量,可以通过这个软件rapid environment.exe配置,例如D:\msys2\mingw64\bin以及D:\msys2\usr\bin路径。windwos gitbash在执行以下脚本前,建议先把上述环境准备好,然后参考这篇文章
⚙️Widnows Gitbash 环境配置简化流程
下载zsh.pkg.tar.zst 打开后继续打开会看到有文件夹等文件,解压放置Gitbash根目录,例如
D:\Program Files\Git系统用户根目录创建文件
C:/Users/{你的用户名}/.bashrc,另外可以额外创建一份.bash_profile并输入以下内容
# Launch Zsh
if [ -t 1 ]; then
exec zsh
fi
🚀 方案一:自动化部署脚本 (推荐)
为简化繁琐的依赖安装与环境配置,提供以下全平台通用 Shell 脚本。该脚本支持环境检测、包管理器自动识别、Oh My Zsh 及核心插件的一键安装。
使用方法
此脚本支持 Android Mac Linux Windows
- 保存下方代码为
install_zsh.sh。 - 在 Git Bash 或其他平台目终端中执行:
chmod +x install_zsh.sh && ./install_zsh.sh或者sh install_zsh.sh
#!/bin/bash
# 定义颜色
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
echo -e "${YELLOW}========================================${NC}"
echo -e "${YELLOW} Zsh + OMZ + QuickShell 配置脚本 ${NC}"
echo -e "${YELLOW}========================================${NC}"
# ==========================================
# 0. 环境与包管理器检测
# ==========================================
OS_TYPE=$(uname -o 2>/dev/null || uname -s)
INSTALL_CMD=""
UPDATE_CMD=""
SUDO=""
detect_pm_linux_mac() {
echo -e "${BLUE}检测到 Linux/Mac 环境,请选择包管理器:${NC}"
echo "1) pkg (Termux)"
echo "2) apt (Debian/Ubuntu/Kali)"
echo "3) choco (Linux?)"
echo "4) pacman (Arch/Manjaro)"
echo "5) brew (macOS/Linux)"
read -p "请输入选项 [1-5]: " pm_choice
case $pm_choice in
1) INSTALL_CMD="pkg install -y"; UPDATE_CMD="pkg update -y";;
2) INSTALL_CMD="apt install -y"; UPDATE_CMD="apt update -y"; SUDO="sudo";;
3) INSTALL_CMD="choco install -y"; UPDATE_CMD="choco upgrade all -y";;
4) INSTALL_CMD="pacman -S --noconfirm"; UPDATE_CMD="pacman -Sy"; SUDO="sudo";;
5) INSTALL_CMD="brew install"; UPDATE_CMD="brew update";;
*) echo "无效,默认 apt"; INSTALL_CMD="apt install -y"; UPDATE_CMD="apt update -y"; SUDO="sudo";;
esac
}
detect_pm_windows() {
echo -e "${BLUE}检测到 Windows 环境,请选择包管理器:${NC}"
echo "1) choco"
echo "2) pacman (MSYS2)"
read -p "请输入选项 [1-2]: " pm_choice
case $pm_choice in
1) INSTALL_CMD="choco install -y"; UPDATE_CMD="choco upgrade all -y";;
2) INSTALL_CMD="pacman -S --noconfirm"; UPDATE_CMD="pacman -Sy";;
*) echo "无效,默认 choco"; INSTALL_CMD="choco install -y"; UPDATE_CMD="choco upgrade all -y";;
esac
}
# --- 开始 OS 检测 ---
case "$OS_TYPE" in
*Android*)
echo -e "${GREEN}-> 检测到 Android 系统 (Termux)${NC}"
INSTALL_CMD="pkg install -y"
UPDATE_CMD="pkg update -y"
;;
*Msys*|*Cygwin*|*Mingw*|*Windows*)
detect_pm_windows
;;
*)
detect_pm_linux_mac
;;
esac
# ==========================================
# 1. 安装基础软件
# ==========================================
echo -e "${GREEN}-> 正在更新源并安装 zsh, git, curl, lsd, bat, fzf...${NC}"
# 执行更新
eval "$SUDO $UPDATE_CMD"
# 执行安装
echo -e "执行安装命令: $SUDO $INSTALL_CMD zsh curl git lsd bat fzf"
eval "$SUDO $INSTALL_CMD zsh curl git lsd bat fzf"
# --- 修复点 1: 刷新命令缓存 ---
# 防止刚安装完 zsh,shell 缓存里还认为没有 zsh
hash -r 2>/dev/null
# 特殊处理:Ubuntu 下 bat 可能叫 batcat
# --- 修复点 2: 兼容性写法 ---
if command -v batcat > /dev/null 2>&1 && ! command -v bat > /dev/null 2>&1; then
echo "检测到 batcat,创建 bat 别名目录..."
mkdir -p ~/.local/bin
ln -s $(which batcat) ~/.local/bin/bat
export PATH=$HOME/.local/bin:$PATH
fi
# 检查 Zsh 是否安装成功
# --- 修复点 3: 使用 > /dev/null 2>&1 替代 &>,兼容 dash ---
if ! command -v zsh > /dev/null 2>&1; then
echo -e "${RED}错误:Zsh 安装失败!${NC}"
echo "调试信息: 尝试手动运行 'zsh --version' 查看是否安装。"
exit 1
fi
# ==========================================
# 2. 用户交互菜单 (安装模式)
# ==========================================
echo -e "请选择安装模式:"
echo -e "${GREEN}1)${NC} ${RED}全新安装${NC} (删除旧配置)"
echo -e "${GREEN}2)${NC} ${BLUE}保留配置,仅更新${NC}"
echo -e "${GREEN}3)${NC} ${YELLOW}保留配置,强制重装插件${NC}"
read -p "请输入选项 [1-3] (其他键退出): " choice
CLEAN_INSTALL=false
FORCE_RECLONE=false
SKIP_ZSHRC=false
case "$choice" in
1) CLEAN_INSTALL=true ;;
2) SKIP_ZSHRC=true; FORCE_RECLONE=false ;;
3) SKIP_ZSHRC=true; FORCE_RECLONE=true ;;
*) exit 1 ;;
esac
# ==========================================
# 3. 处理配置文件 (.zshrc)
# ==========================================
# 定义 Quick Shell 目录,适配非 Android 环境
if [[ "$OS_TYPE" == *"Android"* ]]; then
TARGET_DIR="/sdcard/0.file/shell"
else
TARGET_DIR="$HOME/quick_shell"
fi
if [ "$CLEAN_INSTALL" = true ]; then
echo -e "${GREEN}-> 清理旧配置...${NC}"
rm -rf ~/.zshrc ~/.oh-my-zsh
echo -e "${GREEN}-> 创建 Quick Shell 目录: ${TARGET_DIR}...${NC}"
mkdir -p "$TARGET_DIR"
echo -e "${GREEN}-> 生成 ~/.zshrc...${NC}"
cat > ~/.zshrc << EOF
export ZSH="\$HOME/.oh-my-zsh"
ZSH_THEME="powerlevel10k/powerlevel10k"
plugins=(git zsh-syntax-highlighting zsh-autosuggestions z extract fzf)
source \$ZSH/oh-my-zsh.sh
# 常用别名
alias ls=lsd
alias ll='lsd -l'
alias la='lsd -a'
# Quick Shell 自动加载
QS_DIR="${TARGET_DIR}"
if [ -d "\$QS_DIR" ]; then
for script in "\$QS_DIR"/*; do
if [ -f "\$script" ]; then
filename=\$(basename "\$script")
alias_name="\${filename%.*}"
alias "\$alias_name"="bash '\$script'"
fi
done
fi
EOF
else
echo -e "${BLUE}-> 跳过 .zshrc 生成。${NC}"
fi
# ==========================================
# 4. 安装/更新 Oh My Zsh & 插件
# ==========================================
echo -e "${GREEN}-> 处理 Oh My Zsh...${NC}"
export RUNZSH=no
export KEEP_ZSHRC=yes
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
ZSH_CUSTOM=${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}
install_plugin() {
local url=$1
local path=$2
if [ -d "$path" ]; then
if [ "$FORCE_RECLONE" = true ] || [ "$CLEAN_INSTALL" = true ]; then
rm -rf "$path"
git clone --depth=1 "$url" "$path"
else
git -C "$path" pull || echo "更新失败"
fi
else
git clone --depth=1 "$url" "$path"
fi
}
install_plugin "https://github.com/romkatv/powerlevel10k.git" "${ZSH_CUSTOM}/themes/powerlevel10k"
install_plugin "https://github.com/zsh-users/zsh-syntax-highlighting" "${ZSH_CUSTOM}/plugins/zsh-syntax-highlighting"
install_plugin "https://github.com/zsh-users/zsh-autosuggestions" "${ZSH_CUSTOM}/plugins/zsh-autosuggestions"
# ==========================================
# 5. 结尾
# ==========================================
echo -e "${GREEN}-> 设置默认 Shell...${NC}"
if [[ "$OS_TYPE" == *"Android"* ]]; then
chsh -s zsh
else
# Linux 上尝试自动切换,如果失败提示手动
if which zsh > /dev/null 2>&1; then
chsh -s $(which zsh) || echo -e "${YELLOW}提示:可能需要手动输入密码或运行: chsh -s $(which zsh)${NC}"
fi
fi
echo -e "${GREEN}安装完成!Quick Shell 目录: ${TARGET_DIR}${NC}"
exec zsh -l
🛠️ 方案二:手动分步部署 (Windows Git Bash)
若需深入控制安装细节,可按以下步骤手动配置。
1. 前置环境准备
| 组件 | 作用 | 获取/配置方式 |
|---|---|---|
| Git Bash | 提供基础 Bash 环境 | Git for Windows 官网 |
| MSYS2 | 提供 Pacman 包管理 | MSYS2 官网 |
| 环境变量 | 联通 Git Bash 与 MSYS2 | 将 MSYS2 的 \usr\bin 和 \mingw64\bin 加入 Windows PATH |
注意:配置环境变量后,Git Bash 才能直接识别
pacman、zsh等命令。
2. 核心组件安装
在配置好 PATH 的 Git Bash 中执行:
# 1. 更新包管理器源
pacman -Syu
# 2. 安装 Zsh 及常用工具 (curl, git, fzf, bat)
pacman -S zsh curl git fzf bat
3. 部署 Oh My Zsh 框架
# 使用 curl 安装
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
4. 安装核心插件
# 1. Powerlevel10k 主题
git clone "https://github.com/romkatv/powerlevel10k.git" "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/themes/powerlevel10k"
# 2. 语法高亮 (Syntax Highlighting)
git clone "https://github.com/zsh-users/zsh-syntax-highlighting" "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting"
# 3. 自动建议补全 (Autosuggestions)
git clone "https://github.com/zsh-users/zsh-autosuggestions" "${ZSH_CUSTOM:-$HOME/.oh-my-zsh/custom}/plugins/zsh-autosuggestions"
cc 配置文件详解
需要修改两个核心文件以完成环境集成。
1. ~/.bash_profile (入口引导)
此配置用于在打开 Git Bash 时自动切换至 Zsh 环境。
# 加载 .bashrc (如果存在)
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# 若为交互式 Shell,则切换至 Zsh
if [ -t 1 ]; then
export SHELL=/usr/bin/zsh
exec /usr/bin/zsh
fi
2. ~/.zshrc (核心配置)
集成环境修复、插件管理及网络代理功能。
# --- Powerlevel10k 瞬时提示符 (必须置顶) ---
if [[ -r "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh" ]]; then
source "${XDG_CACHE_HOME:-$HOME/.cache}/p10k-instant-prompt-${(%):-%n}.zsh"
fi
# --- 1. 环境路径修复 (Fix for MSYS2 & Git Bash) ---
export PATH=$PATH:/mingw64/bin:/usr/bin
# 解决 Java/Gradle 等输出乱码问题
export JAVA_TOOL_OPTIONS="-Duser.language=en -Duser.country=US"
# --- 2. Zsh 核心设置 ---
export ZSH="$HOME/.oh-my-zsh"
ZSH_THEME="powerlevel10k/powerlevel10k"
# --- 3. 插件加载 ---
plugins=(
git # Git 缩写
zsh-syntax-highlighting # 语法高亮
zsh-autosuggestions # 自动建议
z # 目录跳转
extract # 智能解压
fzf # 模糊搜索
)
source $ZSH/oh-my-zsh.sh
# --- 4. 网络代理函数 ---
# 开启代理: setproxy | 关闭代理: unsetproxy
function setproxy() {
local PROXY_HOST="127.0.0.1"
local PROXY_PORT="7890" # 按需修改端口
local PROXY_URL="http://${PROXY_HOST}:${PROXY_PORT}"
export http_proxy="${PROXY_URL}"
export https_proxy="${PROXY_URL}"
export all_proxy="socks5://${PROXY_HOST}:${PROXY_PORT}"
# 同步设置 Git 代理
git config --global http.proxy "${PROXY_URL}"
git config --global https.proxy "${PROXY_URL}"
echo "✅ Proxy Enabled: ${PROXY_URL}"
}
function unsetproxy() {
unset http_proxy https_proxy all_proxy
git config --global --unset http.proxy
git config --global --unset https.proxy
echo "❌ Proxy Disabled"
}
# --- 5. 个性化配置加载 ---
[[ ! -f ~/.p10k.zsh ]] || source ~/.p10k.zsh
[ -f ~/.fzf.zsh ] && source ~/.fzf.zsh
💻 开发环境集成
IDE 集成 (IntelliJ IDEA / VSCode)
为确保 IDE 内置终端正确加载 Zsh 配置,需修改 Shell 启动参数。
- Shell path:
"D:\Program Files\Git\bin\bash.exe"(根据实际安装路径调整) - Arguments:
-l -c zsh-l(login): 强制作为登录 Shell 启动,确保加载 Profile。-c zsh: 直接执行 zsh 命令。
脚本集成 (.bat 启动)
若需通过 Windows 批处理脚本调用 Zsh 环境执行任务(如启动服务脚本):
@echo off
set GIT_BASH_EXE="D:\Program Files\Git\bin\bash.exe"
set START_SCRIPT="gitlab-start.sh"
:: 启动 Bash -> 切换 Zsh -> 执行脚本 -> 退出
start "" %GIT_BASH_EXE% -c "/usr/bin/zsh -i -c 'source %START_SCRIPT% && exit'"
📱 附录:Android Termux 配置
Termux 环境配置相对精简,主要差异在于路径与别名。
~/.zshrc (Termux 精简版):
export ZSH="$HOME/.oh-my-zsh"
ZSH_THEME="powerlevel10k/powerlevel10k"
plugins=(git zsh-syntax-highlighting zsh-autosuggestions z extract fzf)
source $ZSH/oh-my-zsh.sh
# 推荐使用 lsd 替代 ls
alias ls=lsd
alias ll='lsd -l'
