好的!下面为你创建一套完整的 环境切换脚本系统,支持一键切换和智能自动检测。
📁 脚本系统目录结构
~/bin/
├── nvim-set-env ← 手动切换环境
├── nvim-auto ← 自动检测文件类型
├── nvim-project ← 项目级配置
└── nvim ← 主启动脚本(可选)
🔧 1. 手动环境切换脚本 (~/bin/nvim-set-env)
#!/bin/bash
# ~/.local/bin/nvim-set-env 或 ~/bin/nvim-set-env
ENV="$1"
VALID_ENVS="python typescript web rust writer"
if [ -z "$ENV" ]; then
echo "Usage: nvim-set-env <environment>"
echo "Available environments: $VALID_ENVS"
echo ""
echo "Current environment: $(cat ~/.config/nvim/.nvim-env 2>/dev/null || echo 'writer (default)')"
exit 1
fi
# 验证环境名称
if ! echo "$VALID_ENVS" | grep -qw "$ENV"; then
echo "Error: Unknown environment '$ENV'"
echo "Available environments: $VALID_ENVS"
exit 1
fi
# 创建配置目录(如果不存在)
mkdir -p ~/.config/nvim
# 设置环境
echo "$ENV" > ~/.config/nvim/.nvim-env
echo "✅ Switched to '$ENV' environment"
# 可选:显示当前环境的快捷键摘要
case "$ENV" in
python)
echo "💡 Python shortcuts: <F5> debug, <leader>tn test"
;;
typescript)
echo "💡 TypeScript shortcuts: <F5> debug, <leader>fd format"
;;
rust)
echo "💡 Rust shortcuts: <F5> debug, <leader>tn cargo test"
;;
writer)
echo "💡 Writer shortcuts: <leader>h1 header, :ZenMode focus"
;;
web)
echo "💡 Web shortcuts: <C-y>, emmet expand, <leader>fd format"
;;
esac🔍 2. 自动环境检测脚本 (~/bin/nvim-auto)
#!/bin/bash
# 自动根据文件扩展名选择环境
if [ $# -eq 0 ]; then
echo "Usage: nvim-auto <file>"
exit 1
fi
FILE="$1"
# 根据文件扩展名判断环境
case "$FILE" in
*.py|*.pyi)
ENV="python"
;;
*.ts|*.tsx|*.js|*.jsx)
ENV="typescript"
;;
*.html|*.css|*.scss|*.sass|*.less)
ENV="web"
;;
*.rs)
ENV="rust"
;;
*.md|*.markdown|*.txt|*.tex|*.latex)
ENV="writer"
;;
*)
# 默认使用 TypeScript 环境(通用性最强)
ENV="typescript"
;;
esac
# 设置环境并启动 Neovim
echo "$ENV" > ~/.config/nvim/.nvim-env
exec nvim "$@"📁 3. 项目级配置脚本 (~/bin/nvim-project)
#!/bin/bash
# 在项目根目录查找 .nvimrc 文件来确定环境
if [ $# -eq 0 ]; then
echo "Usage: nvim-project <file>"
exit 1
fi
FILE="$1"
CURRENT_DIR="$(pwd)"
# 查找项目根目录中的 .nvimrc
while [ "$CURRENT_DIR" != "/" ]; do
if [ -f "$CURRENT_DIR/.nvimrc" ]; then
ENV=$(cat "$CURRENT_DIR/.nvimrc" | tr -d '[:space:]')
VALID_ENVS="python typescript web rust writer"
if echo "$VALID_ENVS" | grep -qw "$ENV"; then
echo "$ENV" > ~/.config/nvim/.nvim-env
echo "✅ Using project environment: $ENV"
exec nvim "$@"
else
echo "Error: Invalid environment in .nvimrc: $ENV"
exit 1
fi
fi
CURRENT_DIR="$(dirname "$CURRENT_DIR")"
done
# 如果没找到 .nvimrc,使用自动检测
exec ~/bin/nvim-auto "$@"🚀 4. 主启动脚本(可选)(~/bin/nvim)
#!/bin/bash
# 智能 Neovim 启动器
if [ $# -eq 0 ]; then
# 无参数:使用当前环境或默认
if [ -f ~/.config/nvim/.nvim-env ]; then
exec /opt/homebrew/bin/nvim "$@"
else
echo "writer" > ~/.config/nvim/.nvim-env
exec /opt/homebrew/bin/nvim "$@"
fi
else
# 有参数:使用自动检测
exec ~/bin/nvim-auto "$@"
fi🔧 安装和配置
1. 创建脚本目录
mkdir -p ~/bin2. 保存所有脚本
将上面四个脚本的内容分别保存到对应文件中。
3. 赋予执行权限
chmod +x ~/bin/nvim-set-env
chmod +x ~/bin/nvim-auto
chmod +x ~/bin/nvim-project
chmod +x ~/bin/nvim # 如果创建了的话4. 添加到 PATH(fish shell)
# 检查是否已包含 ~/bin
if not contains "~/bin" $PATH
set -gx PATH ~/bin $PATH
echo 'set -gx PATH ~/bin $PATH' >> ~/.config/fish/config.fish
end5. 重新加载 fish 配置
source ~/.config/fish/config.fish🎯 使用方法
手动切换环境
# 切换到 Python 环境
nvim-set-env python
# 查看当前环境
nvim-set-env自动检测文件类型
# 自动使用 Python 环境
nvim-auto script.py
# 自动使用 TypeScript 环境
nvim-auto app.tsx
# 自动使用 Writer 环境
nvim-auto notes.md项目级配置
在项目根目录创建 .nvimrc 文件:
# Python 项目
echo "python" > .nvimrc
# Rust 项目
echo "rust" > .nvimrc然后使用:
nvim-project src/main.rs # 自动使用 rust 环境日常使用(推荐)
# 编辑单个文件
nvim-auto main.py
# 在项目中工作
cd my-project
nvim-project src/app.tsx💡 快捷别名(可选)
在 ~/.config/fish/config.fish 中添加:
alias v='nvim-auto'
alias vp='nvim-set-env python && nvim'
alias vt='nvim-set-env typescript && nvim'
alias vw='nvim-set-env web && nvim'
alias vr='nvim-set-env rust && nvim'
alias vw='nvim-set-env writer && nvim'现在你可以:
v main.py # 自动检测
vp # 切换到 Python 并启动空 Neovim
vt app.tsx # 切换到 TS 并编辑文件✅ 验证清单
-
which nvim-set-env显示~/bin/nvim-set-env -
nvim-set-env python成功切换环境 -
nvim-auto test.py自动使用 Python 环境 - 在项目中创建
.nvimrc并测试nvim-project
现在你拥有了一个 完整的环境切换系统!这套脚本既支持手动切换,又支持自动检测,还能处理项目级配置,完全满足你的需求。
需要我帮你添加其他功能吗?比如环境状态显示、历史记录等?