ezcli-win 0.1.1

Windows shell helper for developer workflows such as loading MSVC environments and switching projects
# ezcli


[English README](README.md)

`ezcli` 是一个面向 Windows shell 的可扩展开发辅助工具。

它当前重点解决开发工作流中的一些常见问题,例如加载 MSVC `cl` 编译环境、切换到已配置的项目目录,并让这些变化真正作用到当前的 PowerShell 或 `cmd` 会话中。它未来仍然会围绕开发工作流继续扩展,但主线会始终保持清晰、显式、可预期,并尽量符合 shell 工具的使用习惯。

## 安装


### 从 crates.io 安装


```powershell
cargo install ezcli-win
```

在 `crates.io` 上的包名是 `ezcli-win`,但安装后的命令仍然是:

```powershell
ezcli
```

### 从本地仓库安装


```powershell
cargo install --path .
```

如果你更习惯手动构建,也可以执行:

```powershell
cargo build --release
```

如果你希望直接运行 `ezcli`,请确保可执行文件所在目录已经加入 `PATH`,或者直接从构建输出目录运行。

## 快速开始


### 1. 配置 `vcvarsall.bat`


执行:

```powershell
ezcli --find-cl
```

这一步会:

- 打开文件选择器,让你选择 `vcvarsall.bat`
- 更新 `%USERPROFILE%\.ezcli\ezcli.toml`
- 安装 `cmd` wrapper
- 生成 PowerShell wrapper
- 询问是否把 PowerShell wrapper 写入当前用户的 profile

### 2. 添加项目


执行:

```powershell
ezcli --add-project handmade
```

在选择完项目目录后,就可以通过下面的命令快速进入:

```powershell
ep handmade
```

### 3. 日常使用


当前推荐的日常命令:

PowerShell:

```powershell
ecl
ep handmade
```

cmd:

```cmd
ecl
ep handmade
```

其中:

- `ecl`:把 MSVC `cl` 环境加载到当前 shell 会话
- `ep <name>`:进入指定项目目录,并把该目录前置到当前会话 `PATH`

## 当前能力


- 加载 MSVC `cl` 环境到当前 shell 会话
- 进入配置中的项目目录
- 在进入项目时把项目路径前置到当前会话 `PATH`
- 同时支持 PowerShell 和 `cmd`
- 提供短命令与长命令两组入口

## 为什么需要 wrapper


普通 CLI 是由 shell 启动的子进程。子进程可以修改自己的环境变量和当前目录,但这些变化不会自动回写到父 shell。

因此,`ezcli` 采用两层设计:

- `emit`:负责生成目标 shell 的脚本文本并输出到标准输出
- `wrapper`:负责让当前 shell 执行这些脚本,从而真正修改当前会话

这就是为什么 `ecl` 和 `ep` 能够影响当前 PowerShell 或 `cmd`,而不是只在一个短命的子进程里生效。

## 项目定位


- 面向 Windows shell 工作流,而不只是一次性执行的 CLI
- 以开发效率为重点,但不绑定在某一种语言或某一种项目类型上
- 适合承载环境加载、项目切换,以及后续更多与开发工作流相关的命令
- 强调显式调用,避免新功能污染已有的日常高频入口

如果未来继续扩展,新的命令也应尽量围绕开发工作流组织,而不是混入无关用途。

## 常用命令


### Wrapper 入口


- `ecl`
- `ep <name>`
- `ezcli-load-cl`
- `ezcli-enter-project <name>`

### CLI 入口


- `ezcli --find-cl`
- `ezcli --show-cl`
- `ezcli --add-project <name>`
- `ezcli --show-project`
- `ezcli --del-project`

### 高级命令


这些命令主要用于调试、理解底层行为,或者手动集成 wrapper:

- `ezcli emit --shell powershell load-cl`
- `ezcli emit --shell powershell enter-project <name>`
- `ezcli emit --shell cmd load-cl`
- `ezcli emit --shell cmd enter-project <name>`
- `ezcli emit --shell powershell init`
- `ezcli emit --shell powershell show-profile`
- `ezcli emit --shell powershell install-profile`
- `ezcli emit --shell cmd install-wrapper`

## 配置文件


默认配置文件路径:

```text
%USERPROFILE%\.ezcli\ezcli.toml
```

当前配置结构大致如下:

```toml
vc_path = "C:\\Program Files\\Microsoft Visual Studio\\...\\vcvarsall.bat"
default_arch = "x64"

[[projects]]
name = "handmade"
path = "D:\\code\\handmade"
```

其中:

- `vc_path``vcvarsall.bat` 的路径
- `default_arch`:默认架构参数
- `projects`:项目名与项目路径列表

## 当前限制


- 当前主要面向 Windows
- 当前 wrapper 只覆盖 PowerShell 和 `cmd`
- 反复执行 `ep <name>` 时,当前会话里的 `PATH` 可能出现重复项
- 这份 README 主要记录稳定可用能力,更细的实现细节更适合放到独立文档中

## 当前状态


`ezcli` 已经完成从“直接执行逻辑的 CLI”到“shell wrapper 驱动工具”的核心改造。

PowerShell 和 `cmd` 两条链路都已经打通,`ecl` 与 `ep <name>` 也已经可以作为日常入口使用。

## 后续方向


后续合理的推进方向包括:

- 增加更多使用示例
- 随着功能增长进一步整理命令分组
- 处理 `PATH` 去重
-`docs/` 下补充独立文档
- 在不破坏主线心智模型的前提下增加更多开发工作流能力

## 许可证


本项目使用双许可证:`MIT` 或 `Apache-2.0`。