好的!下面为你创建一套完整的 环境切换脚本系统,支持一键切换和智能自动检测。


📁 脚本系统目录结构

~/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 ~/bin

2. 保存所有脚本

将上面四个脚本的内容分别保存到对应文件中。

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
end

5. 重新加载 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

现在你拥有了一个 完整的环境切换系统!这套脚本既支持手动切换,又支持自动检测,还能处理项目级配置,完全满足你的需求。

需要我帮你添加其他功能吗?比如环境状态显示、历史记录等?