📌 概述

本文旨在 Windows 平台上基于 Git Bash 构建一套类 Unix 的高效终端环境。通过集成 Zsh (Z Shell)、Oh My Zsh 框架及 Powerlevel10k 主题,解决原生 Git Bash 功能单一、缺乏语法高亮与自动补全等痛点,并实现跨平台(Windows/Linux/Android)的配置统一。


如果目标平台是windows,则需要使用gitbash不建议用msys2作为主要的bash!因为windwos上配置的环境变量在msys2没法使用需要重新配置,容易出现一些问题。但是gitbash本身不支持一些包命令操作和一些快捷的命令,所以需要提前安装好msys2msys2自带了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 环境配置简化流程


🚀 方案一:自动化部署脚本 (推荐)

为简化繁琐的依赖安装与环境配置,提供以下全平台通用 Shell 脚本。该脚本支持环境检测、包管理器自动识别、Oh My Zsh 及核心插件的一键安装。

使用方法

此脚本支持 Android Mac Linux Windows

  1. 保存下方代码为 install_zsh.sh
  2. 在 Git Bash 或其他平台目终端中执行:
    chmod +x install_zsh.sh && ./install_zsh.sh 或者 sh install_zsh.sh
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    #!/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 才能直接识别 pacmanzsh 等命令。

2. 核心组件安装

在配置好 PATH 的 Git Bash 中执行:

1
2
3
4
5
# 1. 更新包管理器源
pacman -Syu

# 2. 安装 Zsh 及常用工具 (curl, git, fzf, bat)
pacman -S zsh curl git fzf bat

3. 部署 Oh My Zsh 框架

1
2
# 使用 curl 安装
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

4. 安装核心插件

1
2
3
4
5
6
7
8
# 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 环境。

1
2
3
4
5
6
7
8
9
10
# 加载 .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 (核心配置)

集成环境修复、插件管理及网络代理功能。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# --- 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 环境执行任务(如启动服务脚本):

1
2
3
4
5
6
@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 精简版):

1
2
3
4
5
6
7
8
9
10
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'

链接