vkit 0.1.2

Fast Rust dev CLI: manage Node ports, run scripts, install & sync VS Code / Cursor extensions.
vkit-0.1.2 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 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 这类长驻进程),结束后回到界面并显示退出码。

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」)。