内容由ai生成,仅在archlinux和ubuntu上测试,虽考虑其他系统但不保证能用
使用部分终端远程连接会有字符宽度问题,如ghostty连接时就必须取消自动建议,因为del符号不会正常转换为ascll的del,所有输入都会变成两份。可以确定正常的是windows/gnome/finalshell/termuis。还有个很简单的轻量级的A开头的一个终端也是正常的。
最终效果


配置说明
启用了插件自动建议和语法高亮以及内置的git和extract
使用了改良的主题
禁用默认的环境标志(会将主题顶开,就变丑了),在主题中获取环境名称并显示,同时限制名称长度以免过长。
创建了便捷函数activate和venv函数用户激活和创建并激活虚拟环境。
创建了便捷函数compress,这是与ectract对应的,extract可以用x解压很多文件,所以创建了这个z指令可以压缩各种格式。
一键安装脚本
有注释,也可以照着自己操作,脚本不一定可靠,ai写的。
#!/bin/bash
# 检查是否通过sudo执行
if [ -n "$SUDO_USER" ]; then
echo "错误:请不要使用sudo执行此脚本。"
echo "请直接以当前用户身份运行:./$(basename "$0")"
exit 1
fi
# 检查当前用户是否为sudoer
if sudo -l > /dev/null 2>&1; then
is_sudoer=true
else
is_sudoer=false
fi
#选择github代理地址
# 显示选项菜单
echo "请选择GitHub代理地址(直接回车跳过使用默认地址):"
echo "1) https://gitproxy.click/"
echo "2) https://gh-proxy.net/"
echo "3) https://gh.llkk.cc/"
echo "4) 手动输入"
echo "*) 不使用代理(默认)"
# 读取用户输入
read -p "请输入选项编号 (1-4): " choice
# 根据选择设置代理地址
case $choice in
1)
proxy="https://gitproxy.click/"
;;
2)
proxy="https://gh-proxy.net/"
;;
3)
proxy="https://gh.llkk.cc/"
;;
4)
read -p "请输入自定义代理地址: " custom_proxy
# 确保自定义地址以斜杠结尾
if [[ -n "$custom_proxy" && "${custom_proxy: -1}" != "/" ]]; then
custom_proxy="${custom_proxy}/"
fi
proxy="$custom_proxy"
;;
*)
proxy=""
;;
esac
# 构建新地址
github_address="${proxy}https://github.com"
# 显示选择结果
echo -e "\n已选择代理地址: ${proxy:-无}"
echo "github下载地址: $github_address"
# 检查依赖是否已安装
echo -e "检查依赖是否已安装..."
missing_deps=()
for dep in zsh git curl tar zip unzip xz gzip bzip2; do
if ! command -v "$dep" &> /dev/null; then
missing_deps+=("$dep")
fi
done
# 如果没有缺失依赖就继续,缺失则尝试安装
if [ ${#missing_deps[@]} -eq 0 ]; then
echo -e "\n所有依赖 (zsh, git, curl) 已安装。"
else
# 如果有缺失依赖且不是sudoer则报错退出
if ! $is_sudoer; then
echo "错误:缺少以下依赖: ${missing_deps[*]}"
echo "当前用户无sudo权限,请手动安装后重试。"
exit 1
fi
# 安装缺失依赖
echo "正在安装依赖: ${missing_deps[*]}"
# 检测包管理器并安装
if command -v apt-get &> /dev/null; then
sudo apt-get update
install_list=()
for dep in "${missing_deps[@]}"; do
if [ "$dep" = "xz" ]; then
install_list+=("xz-utils")
else
install_list+=("$dep")
fi
done
sudo apt-get install -y "${install_list[@]}"
elif command -v dnf &> /dev/null; then
sudo dnf install -y "${missing_deps[@]}"
elif command -v yum &> /dev/null; then
sudo yum install -y "${missing_deps[@]}"
elif command -v zypper &> /dev/null; then
sudo zypper install -y "${missing_deps[@]}"
elif command -v pacman &> /dev/null; then
sudo pacman -Syu --noconfirm "${missing_deps[@]}"
else
echo "错误:不支持的包管理器,请手动安装以下依赖: ${missing_deps[*]}"
exit 1
fi
echo "依赖安装完成!"
fi
# 获取当前用户名和家目录
CURRENT_USER=$(whoami)
USER_HOME=$(eval echo ~$CURRENT_USER)
OHMYZSH_DIR="$USER_HOME/.oh-my-zsh"
ZSH_CUSTOM="${ZSH_CUSTOM:-$OHMYZSH_DIR/custom}"
# 安装oh-my-zsh
echo -e "\n正在安装oh-my-zsh..."
if [ ! -d "$OHMYZSH_DIR" ]; then
# 下载oh-my-zsh安装脚本
echo -e "\n下载oh-my-zsh安装脚本"
echo -e "\n${proxy}https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh"
curl -OfsSL ${proxy}https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh
# 处理install.sh文件
if [[ -f "install.sh" ]]; then
echo -e "\n处理脚本"
# 替换操作
if sed --version 2>/dev/null | grep -q GNU; then
sed -i "s|https://github.com/|$github_address/|g" install.sh
else # macOS系统
sed -i "" "s|https://github.com/|$github_address/|g" install.sh
fi
chmod +x ./install.sh
else
echo -e "\n错误: install.sh 下载失败,请检查代理地址和网络"
exit 1
fi
echo -e "\n执行oh-my-zsh安装脚本"
RUNZSH=no ./install.sh
rm ./install.sh
else
echo "oh-my-zsh已经安装,跳过安装步骤"
fi
if [ ! -d "$OHMYZSH_DIR" ]; then
echo -e "\n错误:oh-my-zsh安装失败!"
exit 1
fi
# 安装插件函数
install_plugin() {
local repo_url=$1
local plugin_name=$2
if [ ! -d "$ZSH_CUSTOM/plugins/$plugin_name" ]; then
echo "正在安装 $plugin_name 插件..."
git clone ${proxy}${repo_url} "$ZSH_CUSTOM/plugins/$plugin_name"
else
echo "$plugin_name 插件已经存在,跳过安装"
fi
}
# 安装插件
install_plugin "https://github.com/zsh-users/zsh-syntax-highlighting.git" "zsh-syntax-highlighting"
install_plugin "https://github.com/zsh-users/zsh-autosuggestions.git" "zsh-autosuggestions"
# 备份原有的zshrc文件
echo -e "\n正在备份配置文件..."
if [ -f "$USER_HOME/.zshrc" ]; then
cp "$USER_HOME/.zshrc" "$USER_HOME/.zshrc.bak"
echo "已备份原有.zshrc文件为.zshrc.bak"
fi
# ======================配置zshrc==========================
echo -e "\n正在配置.zshrc文件..."
cat > "$USER_HOME/.zshrc" << 'EOL'
# oh-my-zsh安装路径
export ZSH="$HOME/.oh-my-zsh"
# 设置主题
ZSH_THEME="xiong-chiamiov"
# 插件设置
plugins=(
git
extract
z
zsh-syntax-highlighting
zsh-autosuggestions
)
# 加载oh-my-zsh
source $ZSH/oh-my-zsh.sh
# 禁用默认的python虚拟环境标志
export VIRTUAL_ENV_DISABLE_PROMPT=1
# ==============================================
# 用户自定义配置
# ==============================================
# python虚拟环境
# ----------------------------------------------
# 已经弃用的旧python虚拟环境激活方式
#alias activate='source $(find . -maxdepth 3 -type f -name "activate" -path "*/bin/activate" -print -quit 2>/dev/null)'
# 创建并激活名为 .venv 的 Python 虚拟环境
venv() {
# 检查是否已激活虚拟环境
if [[ -n "$VIRTUAL_ENV" ]]; then
echo "❌ 当前已经激活环境: $(basename "$VIRTUAL_ENV")"
echo " 请先使用 'deactivate' 停止当前虚拟环境"
return 1 2>/dev/null || exit 1
fi
if [ -d ".venv" ]; then
echo "➜ 虚拟环境 .venv 已存在,正在激活..."
source .venv/bin/activate
else
echo "➜ 创建虚拟环境 .venv..."
python3 -m venv .venv
source .venv/bin/activate
echo "✓ 已创建并激活虚拟环境!"
fi
}
# 智能激活当前目录下的虚拟环境
activate() {
# 检查是否已激活虚拟环境
if [[ -n "$VIRTUAL_ENV" ]]; then
echo "❌ 当前已经激活环境: $(basename "$VIRTUAL_ENV")"
echo " 请先使用 'deactivate' 停止当前虚拟环境"
return 1 2>/dev/null || exit 1
fi
# 查找所有 bin/activate 文件
local envs=($(find . -path "*bin/activate" -type f 2>/dev/null))
case ${#envs[@]} in
0)
echo "❌ 未找到虚拟环境 (没有找到 bin/activate 文件)"
return 1
;;
1)
echo "➜ 找到虚拟环境: ${envs[1]}"
source "${envs[1]}"
echo "✓ 已激活虚拟环境"
;;
*)
echo "📁 找到多个虚拟环境:"
local i=1
for env in "${envs[@]}"; do
echo " [$i] $(dirname "$(dirname "$env")")"
((i++))
done
echo -n "⌨️ 请选择要激活的环境编号 (1-${#envs[@]}): "
read choice
if [[ "$choice" =~ ^[0-9]+$ ]] && [ "$choice" -ge 1 ] && [ "$choice" -le ${#envs[@]} ]; then
source "${envs[$choice]}"
echo "✓ 已激活: $(dirname "$(dirname "${envs[$choice]}")")"
else
echo "❌ 无效选择"
return 1
fi
;;
esac
}
# 压缩
# ----------------------------------------------
compress() {
# 默认设置
local format="zip"
local level=""
local target=""
local sources=()
local update_mode=0
local format_specified=0
# 解析选项
while getopts ":gxzb:l:" opt; do
case $opt in
g) format="tar.gz"; format_specified=1 ;;
x) format="tar.xz"; format_specified=1 ;;
z) format="zip"; format_specified=1 ;;
b) format="tar.bz2"; format_specified=1 ;;
l)
if [[ $OPTARG =~ ^[0-9]$ ]]; then
level=$OPTARG
else
echo "❌ 无效压缩级别: $OPTARG (必须是 0-9)"
return 1
fi
;;
\?)
echo "❌ 无效选项: -$OPTARG"
return 1
;;
:)
echo "❌ 选项 -$OPTARG 需要参数"
return 1
;;
esac
done
shift $((OPTIND - 1))
# 检查参数
if [[ $# -lt 1 ]]; then
echo "用法: z [选项] <目标压缩文件> <源文件/目录...>"
echo "选项:"
echo " -z 压缩为 zip 格式 (默认)"
echo " -g 压缩为 tar.gz 格式"
echo " -x 压缩为 tar.xz 格式"
echo " -b 压缩为 tar.bz2 格式"
echo " -l [0-9] 设置压缩级别"
return 1
fi
# 获取目标文件名和源文件
target=$1
shift
sources=($@)
# 检查源文件是否存在
for src in $sources; do
if [[ ! -e $src ]]; then
echo "❌ 源文件不存在: $src"
return 1
fi
done
# 检测目标文件后缀并自动修正格式
local target_ext=${target##*.}
if [[ -n $target_ext && $target_ext != $target ]]; then
case $target_ext in
zip) detected_format="zip" ;;
gz) detected_format="tar.gz" ;;
tgz) detected_format="tar.gz" ;;
xz) detected_format="tar.xz" ;;
txz) detected_format="tar.xz" ;;
bz2) detected_format="tar.bz2" ;;
tbz2) detected_format="tar.bz2" ;;
*) detected_format="" ;;
esac
if [[ -n $detected_format ]]; then
# 后缀与选项冲突时警告
if [[ $format_specified -eq 1 && $detected_format != $format ]]; then
echo "⚠️ 文件后缀 .$target_ext 表示 $detected_format 格式,将覆盖选项指定的 $format 格式"
fi
format=$detected_format
fi
fi
# 检查压缩级别支持
if [[ -n $level ]]; then
case $format in
zip|tar.gz|tar.xz|tar.bz2)
# 有效格式,继续
;;
*)
echo "⚠️ 压缩级别选项对 $format 格式无效,将被忽略"
level=""
;;
esac
fi
# 检查目标文件是否存在
if [[ -e $target ]]; then
echo "➜ 更新现有压缩文件: $target"
update_mode=1
else
echo "➜ 创建新压缩文件: $target"
fi
# 执行压缩操作
case $format in
zip)
local zip_opts=""
if [[ -n $level ]]; then
zip_opts="-$level"
fi
if [[ $update_mode -eq 1 ]]; then
zip $zip_opts -u -r $target $sources
else
zip $zip_opts -r $target $sources
fi
;;
tar.gz)
local gz_opts=""
if [[ -n $level ]]; then
gz_opts="--fast" # 默认级别
if [[ $level -gt 1 ]]; then
gz_opts="-$level"
fi
fi
if [[ $update_mode -eq 1 ]]; then
# Tar 不支持直接更新,需要解压后重新压缩
echo "⚠️ tar 格式不支持直接更新,创建新文件: $target.new"
tar --delete -f $target $sources 2>/dev/null
tar $gz_opts -cvzf $target.new $sources
mv $target.new $target
else
tar $gz_opts -cvzf $target $sources
fi
;;
tar.xz)
local xz_opts=""
if [[ -n $level ]]; then
xz_opts="-$level"
fi
if [[ $update_mode -eq 1 ]]; then
echo "⚠️ tar 格式不支持直接更新,创建新文件: $target.new"
tar --delete -f $target $sources 2>/dev/null
tar -cvf - $sources | xz $xz_opts > $target.new
mv $target.new $target
else
tar -cvf - $sources | xz $xz_opts > $target
fi
;;
tar.bz2)
local bz2_opts=""
if [[ -n $level ]]; then
bz2_opts="-$level"
fi
if [[ $update_mode -eq 1 ]]; then
echo "⚠️ tar 格式不支持直接更新,创建新文件: $target.new"
tar --delete -f $target $sources 2>/dev/null
tar -cvf - $sources | bzip2 $bz2_opts > $target.new
mv $target.new $target
else
tar -cvf - $sources | bzip2 $bz2_opts > $target
fi
;;
*)
echo "❌ 不支持的压缩格式: $format"
return 1
;;
esac
# 检查结果
if [[ $? -eq 0 ]]; then
echo "✓ 压缩完成: $target ($(du -h $target | cut -f1))"
else
echo "❌ 压缩失败"
return 1
fi
}
# 创建 z 命令别名
alias z=compress
# 文件列出
# ----------------------------------------------
alias ll='ls -alFh'
alias la='ls -A'
alias l='ls -CF'
EOL
# ========================================================
# 创建自定义主题
echo -e "\n正在创建自定义主题..."
CUSTOM_THEME_DIR="$ZSH_CUSTOM/themes"
CUSTOM_THEME_NAME="xiong-chiamiov-betterVENV"
CUSTOM_THEME_FILE="$CUSTOM_THEME_DIR/$CUSTOM_THEME_NAME.zsh-theme"
mkdir -p "$CUSTOM_THEME_DIR"
if [ ! -f "$CUSTOM_THEME_FILE" ]; then
cat > "$CUSTOM_THEME_FILE" << 'EOL'
# 字符串截断函数,保留后n个字符
function truncate_str() {
local str=$1
local len=$2
# 先去除颜色转义序列获取纯文本长度
local plain_str=$(echo "$str" | sed -E 's/\\e\[[0-9;]*m//g')
if [ ${#plain_str} -gt $len ]; then
# 保留原始颜色,仅截断文本部分
echo "${str:0: 3}...${str: 6-$len}"
else
echo "$str"
fi
}
# 获取可靠的主机名
function get_hostname() {
local host_name
# 尝试多种获取主机名的方式
if command -v hostname &> /dev/null; then
host_name=$(hostname)
elif [ -f /etc/hostname ]; then
host_name=$(cat /etc/hostname)
else
host_name=${HOSTNAME:-$(uname -n)}
fi
# 去除域名部分(如果有)
host_name=${host_name%%.*}
echo "$host_name"
}
# 虚拟环境信息函数
function venv_info() {
if [ -n "$VIRTUAL_ENV" ]; then
local venv_name=$(basename "$VIRTUAL_ENV")
venv_name=$(truncate_str "$venv_name" 20)
echo "%{\e[0;34m%}%B[%b%{\e[0m%}%{\e[1;90m%}${venv_name}%{\e[0m%}%{\e[0;34m%}%B]%b%{\e[0m%} - "
else
echo ""
fi
}
# 主提示符
PROMPT=$'%{\e[0;34m%}%B┌─[%b%{\e[0m%}%{\e[1;32m%}%n%{\e[1;30m%}@%{\e[0m%}%{\e[0;36m%}$(truncate_str $(get_hostname) 10)%{\e[0;34m%}%B]%b%{\e[0m%} - %b%{\e[0;34m%}%B[%b%{\e[1;37m%}$(truncate_str $(print -P %~) 28)%{\e[0;34m%}%B]%b%{\e[0m%} - %{\e[0;34m%}%B[%b%{\e[0;33m%}'%D{"%b%d %H:%M"}%b$'%{\e[0;34m%}%B]%b%{\e[0m%}
%{\e[0;34m%}%B└─$(venv_info)%{\e[0;34m%}%B[%{\e[1;35m%}$%{\e[0;34m%}%B]>%{\e[0m%}%b '
# 次提示符
PS2=$' \e[0;34m%}%B>%{\e[0m%}%b '
EOL
echo "已创建空主题模板: $CUSTOM_THEME_FILE"
else
echo "自定义主题已存在: $CUSTOM_THEME_FILE"
fi
# 设置使用自定义主题
sed -i "s/ZSH_THEME=.*/ZSH_THEME=\"$CUSTOM_THEME_NAME\"/" "$USER_HOME/.zshrc"
# 询问是否将 zsh 设为默认终端
echo -e "\n\033[1m配置 zsh 为默认终端:\033[0m"
read -p "是否将 zsh 设为当前用户的默认 shell?(y/n) " set_default_shell
if [[ $set_default_shell =~ ^[Yy]$ ]]; then
if command -v zsh &> /dev/null; then
echo "正在将 zsh 设为默认 shell..."
chsh -s "$(command -v zsh)" "$USER"
echo "已成功将 zsh 设为默认 shell。需要重新登录生效。"
else
echo "错误: zsh 未安装,无法设置默认 shell。" >&2
fi
fi
# 询问是否在 bashrc 中添加强化配置
echo -e "\n\033[1m强化 bashrc 配置:\033[0m"
read -p "是否在 ~/.bashrc 中添加自动启动 zsh 的配置?(y/n) " enhance_bashrc
if [[ $enhance_bashrc =~ ^[Yy]$ ]]; then
echo "正在更新 ~/.bashrc..."
if ! grep -q "自动启动 zsh" ~/.bashrc; then
cat >> ~/.bashrc << 'EOL'
# 自动启动 zsh (由 oh-my-zsh 安装脚本添加)
if [ -t 1 ] && [ -z "$ZSH_VERSION" ] && [ -f "$HOME/.oh-my-zsh/oh-my-zsh.sh" ]; then
export SHELL=$(command -v zsh)
exec $(command -v zsh) -l
fi
EOL
echo "已添加强化配置到 ~/.bashrc"
else
echo "~/.bashrc 中已存在相关配置,跳过添加。"
fi
fi
echo -e "\n安装完成!请执行以下操作之一:"
echo "1. 注销后重新登录"
echo "2. 运行 'exec zsh' 立即生效"
echo "3. 使用 'activate' 命令快速激活虚拟环境"
安装依赖
# ubuntu
sudo apt update
sudo apt install -y zsh git curl tar zip unzip xz-utils gzip bzip2
# archlinux
sudo pacman -Syy zsh git curl tar zip unzip xz gzip bzip2
安装oh-my-zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
这里下载下载失败可以使用代理下载这个脚本,然后找到REMOTE=${REMOTE:-https://github.com/${REPO}.gi}这一行,在地址前添加代理地址。
安装插件
# 语法高亮
git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ~/.oh-my-zsh/custom/plugins/zsh-syntax-highlighting
# 自动建议
git clone https://github.com/zsh-users/zsh-autosuggestions.git ~/.oh-my-zsh/custom/plugins/zsh-autosuggestions
编写配置文件
# 备份原配置
mv ~/.zshrc ~/.zshrc.bak
# 创建并编写配置
vim ~/.zshrc
编写配置
# oh-my-zsh安装路径
export ZSH="$HOME/.oh-my-zsh"
# 设置主题
ZSH_THEME="xiong-chiamiov"
# 插件设置
plugins=(
git
extract
z
zsh-syntax-highlighting
zsh-autosuggestions
)
# 加载oh-my-zsh
source $ZSH/oh-my-zsh.sh
# 禁用默认的python虚拟环境标志
export VIRTUAL_ENV_DISABLE_PROMPT=1
# ==============================================
# 用户自定义配置
# ==============================================
# python虚拟环境
# ----------------------------------------------
# 已经弃用的旧python虚拟环境激活方式
#alias activate='source $(find . -maxdepth 3 -type f -name "activate" -path "*/bin/activate" -print -quit 2>/dev/null)'
# 创建并激活名为 .venv 的 Python 虚拟环境
venv() {
# 检查是否已激活虚拟环境
if [[ -n "$VIRTUAL_ENV" ]]; then
echo "❌ 当前已经激活环境: $(basename "$VIRTUAL_ENV")"
echo " 请先使用 'deactivate' 停止当前虚拟环境"
return 1 2>/dev/null || exit 1
fi
if [ -d ".venv" ]; then
echo "➜ 虚拟环境 .venv 已存在,正在激活..."
source .venv/bin/activate
else
echo "➜ 创建虚拟环境 .venv..."
python3 -m venv .venv
source .venv/bin/activate
echo "✓ 已创建并激活虚拟环境!"
fi
}
# 智能激活当前目录下的虚拟环境
activate() {
# 检查是否已激活虚拟环境
if [[ -n "$VIRTUAL_ENV" ]]; then
echo "❌ 当前已经激活环境: $(basename "$VIRTUAL_ENV")"
echo " 请先使用 'deactivate' 停止当前虚拟环境"
return 1 2>/dev/null || exit 1
fi
# 查找所有 bin/activate 文件
local envs=($(find . -path "*bin/activate" -type f 2>/dev/null))
case ${#envs[@]} in
0)
echo "❌ 未找到虚拟环境 (没有找到 bin/activate 文件)"
return 1
;;
1)
echo "➜ 找到虚拟环境: ${envs[1]}"
source "${envs[1]}"
echo "✓ 已激活虚拟环境"
;;
*)
echo "📁 找到多个虚拟环境:"
local i=1
for env in "${envs[@]}"; do
echo " [$i] $(dirname "$(dirname "$env")")"
((i++))
done
echo -n "⌨️ 请选择要激活的环境编号 (1-${#envs[@]}): "
read choice
if [[ "$choice" =~ ^[0-9]+$ ]] && [ "$choice" -ge 1 ] && [ "$choice" -le ${#envs[@]} ]; then
source "${envs[$choice]}"
echo "✓ 已激活: $(dirname "$(dirname "${envs[$choice]}")")"
else
echo "❌ 无效选择"
return 1
fi
;;
esac
}
# 文件列出
# ----------------------------------------------
alias ll='ls -alFh'
alias la='ls -A'
alias l='ls -CF'
修改主题
打开~/.oh-my-zsh/themes/xiong-chiamiov.zsh-theme文件
# 字符串截断函数,保留后n个字符
function truncate_str() {
local str=$1
local len=$2
# 先去除颜色转义序列获取纯文本长度
local plain_str=$(echo "$str" | sed -E 's/\\e\[[0-9;]*m//g')
if [ ${#plain_str} -gt $len ]; then
# 保留原始颜色,仅截断文本部分
echo "${str:0: 3}...${str: 6-$len}"
else
echo "$str"
fi
}
# 获取可靠的主机名
function get_hostname() {
local host_name
# 尝试多种获取主机名的方式
if command -v hostname &> /dev/null; then
host_name=$(hostname)
elif [ -f /etc/hostname ]; then
host_name=$(cat /etc/hostname)
else
host_name=${HOSTNAME:-$(uname -n)}
fi
# 去除域名部分(如果有)
host_name=${host_name%%.*}
echo "$host_name"
}
# 虚拟环境信息函数
function venv_info() {
if [ -n "$VIRTUAL_ENV" ]; then
local venv_name=$(basename "$VIRTUAL_ENV")
venv_name=$(truncate_str "$venv_name" 20)
echo "%{\e[0;34m%}%B[%b%{\e[0m%}%{\e[1;90m%}${venv_name}%{\e[0m%}%{\e[0;34m%}%B]%b%{\e[0m%} - "
else
echo ""
fi
}
# 主提示符
PROMPT=$'%{\e[0;34m%}%B┌─[%b%{\e[0m%}%{\e[1;32m%}%n%{\e[1;30m%}@%{\e[0m%}%{\e[0;36m%}$(truncate_str $(get_hostname) 10)%{\e[0;34m%}%B]%b%{\e[0m%} - %b%{\e[0;34m%}%B[%b%{\e[1;37m%}$(truncate_str $(print -P %~) 28)%{\e[0;34m%}%B]%b%{\e[0m%} - %{\e[0;34m%}%B[%b%{\e[0;33m%}'%D{"%b%d %H:%M"}%b$'%{\e[0;34m%}%B]%b%{\e[0m%}
%{\e[0;34m%}%B└─$(venv_info)%{\e[0;34m%}%B[%{\e[1;35m%}$%{\e[0;34m%}%B]>%{\e[0m%}%b '
# 次提示符
PS2=$' \e[0;34m%}%B>%{\e[0m%}%b '
1万+

被折叠的 条评论
为什么被折叠?



