vkit 0.1.4

Fast Rust dev CLI: manage git worktrees, Node ports, run scripts, install & sync VS Code / Cursor extensions.
vkit-0.1.4 is not a library.

vkit

用 Rust + ratatui 重写的 vkit CLI 快速伴生工具(二进制与命令均为 vkit,源码仓库为 vkit-rs)。目标:把「唤起 → 交互 → 退出」的秒级命令做到极致启动速度(Node + Ink 冷启动约 80–150ms,Rust 二进制约几 ms)。

独立于 vkit 主仓的实验 / 学习项目,与其并存、互不干扰。

命令

命令 说明 平台
vkit 无参数进入入口菜单(dashboard),选择要用的工具 跨平台
vkit port 列出正在监听的 Node 端口及进程,多选一键关闭 仅 macOS
vkit run 扫描当前目录及子包的 package.json,过滤 + 多选批量运行 scripts(须在 git 仓库内) 跨平台
vkit worktree(别名 wt TUI 管理 worktree;另有 wt switch / wt shell-init 跨平台
vkit vsix 从 Marketplace 下载 VSIX 并安装到 Cursor / VS Code 跨平台
vkit sync 把 VS Code 已装扩展批量同步到 Cursor 跨平台
vkit preview 一屏预览所有主题色与组件样式(校色用) 跨平台
vkit update 从 GitHub Releases 下载最新二进制并原地替换 跨平台

dashboard 键位:↑/↓ 选择 · Enter 进入 · 1-9 直达 · ? 帮助(列出子命令)· q 退出。

所有选择列表均支持环形移动:在第一项按 跳到最后一项,在最后一项按 回到第一项。

配色为 Everforest 风格低饱和主题:绿色作主强调(标题 / logo / 按键 / 聚焦边框),黄色表示勾选 / 选中,橙色表示光标行,绿色另用于成功状态(如状态 ✓);边框统一走弱化色。启动时按终端背景自动切换深/浅色(探测失败默认深色)。所有选择列表的未选中标题、描述、勾选样式与光标高亮均统一。

安装

# 从 crates.io 安装(需要 Rust 工具链)
cargo install vkit

或从 Releases 下载对应平台的预编译二进制(macOS / Linux),解压后把 vkit 放进 PATH。

从源码安装

需要 Rust 工具链

# 从源码安装到 ~/.cargo/bin
cargo install --path .

# 或直接构建后自行软链
cargo build --release
ln -sf "$(pwd)/target/release/vkit" /usr/local/bin/vkit

开发

cargo run -- port   # 运行
cargo test          # 单测(纯逻辑:解析 / 过滤 / 截断 / 选择状态)
cargo clippy        # lint

port 键位

  • ↑ / ↓:移动光标
  • /:进入搜索模式(端口号 / 进程名 / 完整命令;Enter 回列表,Esc 清空)
  • Space:勾选 / 取消当前行
  • A:全选 / 全不选(当前搜索范围)
  • Enter:关闭选中项(未勾选时关闭当前行)——弹出二次确认(Y 确认 / n 取消 / Esc 返回)
  • R:重新扫描刷新
  • q / Esc:退出;Ctrl+C 退出

表格的 DIR 列显示每行服务的启动目录(进程 cwd,即启动该服务时所在的目录,home 前缀缩写为 ~),方便区分是哪个项目起的服务。搜索也会匹配该目录。

关闭进程:确认后在后台线程执行并显示 loading(spinner),先 SIGTERM 优雅退出,3 秒未退再 SIGKILL 强制,完成后就地刷新。

run 键位

双栏主从布局:左栏包列表,右栏当前包的 scripts。

包栏(左)

  • ↑ / ↓:切换包
  • / l / Tab:进入右侧 scripts
  • 1-9:跳到第 N 个包并进入其 scripts

Scripts 栏(右)

  • ↑ / ↓:移动光标(光标行显示 → 命令
  • / h:回到包栏
  • Space:勾选 / 取消当前 script
  • A:全选 / 全不选本包 scripts

通用

  • Enter:运行——有勾选则跨包批量顺序运行,否则运行光标所在 script
  • /:进入搜索模式(包名 / script / 命令;Enter 回列表,Esc 清空)
  • R:重新扫描刷新
  • q / Esc:退出;Ctrl+C 退出

发现范围:须位于 git 仓库内(自当前目录向上找 .git),再从当前目录递归扫描所有 package.json(尊重 .gitignore,跳过 node_modules/dist/target 等),当前目录所属包排在最前并标 *,包名后括号内为已勾选数。嵌套子包显示为 父包 -> 子包。包管理器按 packageManager 字段 → lock 文件逐级向上探测(默认 npm)。运行时会临时挂起 TUI,把终端完整交给子进程(继承 stdio,适配 dev 这类长驻进程),结束后回到界面并显示退出码。

worktree / wt

管理当前仓库的 Main Worktree 与约定 Placement 下的附加 Worktree(In-repo:.worktrees/;Global:默认 ~/worktrees/<repo>/,可在 ~/.config/vkit/config.toml[worktree] global_root 覆盖)。其它路径上的 worktree 不展示。

快速切换(学自 Worktrunk)

# 一次性启用 shell 集成(定义 vkit-wt / 别名 vwt,不抢占 worktrunk 的 wt)
eval "$(vkit wt shell-init zsh)"   # 可写入 ~/.zshrc

vwt switch feat            # 进入该分支的 worktree(自动 cd)
vwt switch -               # 上一个 worktree
vwt switch ^               # Main
vwt switch -c feat/x       # 新建分支 + worktree 并进入
vwt switch mr:126          # 按 GitLab MR 进入(必要时创建 worktree)
vwt switch feat -x cursor  # 进入后打开 cursor

无 shell 集成时,vkit wt switch 仍会打印路径,但不会改父 shell 的 cwd。

TUI

vkit wt / vkit worktree 进入表格界面。若已 eval shell-init,在 TUI 里按 Enter 会写 CD 指令并退出,由 vwt 包装层自动 cd。

列表为表格:BRANCH / PATH / WHERE / STATUS(相对 Main:绿 领先、红 落后、= 齐平、黄 * 脏)/ MR(!N 打开 · !N✓ 已合并 · !N× 已关闭)。

列表键位

  • ↑ / ↓:移动
  • Enter:进入(有 shell 集成则 cd;否则开子 shell)
  • o:用 cursor 打开
  • m:浏览器打开 MR
  • n:新建
  • d:Remove(保留分支)
  • p:Purge(连分支删)
  • r:刷新
  • q / Esc:退出

vsix 键位

两步流程:输入扩展 → 下载 → 选编辑器安装。

  • 输入:键入扩展 id(publisher.name)或 Marketplace 链接;Enter 查询最新版本并下载到 ~/DownloadsEsc 退出。
  • 选编辑器(下载完成后自动进入,若检测到 cursor / code):↑/↓ 移动 · Space 选择 · A 全选 · Enter 安装 · Esc 跳过。

下载走 Marketplace 的 extensionquery(查最新版本)+ vspackage(带 gzip 自动解压),安装用 <editor> --install-extensionCtrl+C 随时退出。

sync 键位

把 VS Code 已装扩展批量同步到 Cursor(方向固定 VS Code → Cursor)。

  • 进入后自动读取两个编辑器的 --list-extensions,算出 Cursor 尚缺的插件。
  • 选择:左右双栏布局——左栏「待安装」展示 Cursor 尚缺、可多选的插件(checkbox + 光标高亮,焦点常驻),右栏「已安装」只读展示已在 Cursor 里的插件(弱化样式、前缀 ✓)。键位:↑/↓ 移动 · Space 选择 · A 全选 · Enter 下一步 · Esc 退出(默认全选缺失项)。
  • 确认Enter 开始 · Esc 返回修改。
  • 同步中:逐个下载 vsix 到临时目录并安装,实时显示进度与每项状态;完成后展示成功/失败汇总,Enter/q 返回。

前置:需要 codecursor 两个命令都在 PATH(在各自编辑器里执行「Shell Command: Install 'xxx' command in PATH」)。