rvs(rust-verb-shell)v26.7.12 更新:借鉴 ripgrep、自身可观测、修了 mkdir
项目地址开源仓库rust-verb-shell:基于 Rust 的 PowerShell 风格 Shell 项目 - AtomGitMulanPSL-2.0 许可证。本文讲的是从 v26.7.0 到 v26.7.12 这一路迭代更新了什么。所有命令以最新 dev 分支为准。一、先说设计哲学的两处修正1. 从 PowerShell 的New-Item思路里跳出来最初 rvs 抄了 PowerShell 的New-Item用一个命令、一个--type参数同时创建文件和目录。听起来很统一实际很坑new-item --path foo # 默认 --type file创建文件 foo new-item --path bar --type dir # 创建目录 bar问题在于mkdir这个别名也指向new-item而new-item默认--type file。于是mkdir demo实际创建了一个名为demo的文件不是目录。这是个会让人骂街的静默错误。新版把new-item拆开语义各自明确命令别名说明new-directorymkdir只创建目录--parents默认 true控制递归new-filetouch/ni只创建文件--value提供初始内容new-directory --path demo # 创建目录 demo mkdir demo # 别名等价 new-file --path test.rs # 创建空文件 touch test.rs --value fn main(){} # 创建带初始内容的文件这个拆分还为未来留了位置new-softlink、new-hardlink都可以按同样模式加进来不需要在--type上继续叠条件。2. 用户可见文本里的Verb-Noun全部改成verb-noun旧版 banner 里写的是「commands use Verb-Noun style」跟 rvs 自己「全小写 kebab-case」的设计原则自相矛盾——既然命令名是get-child-item这种全小写形式那提示语里就不该出现 PascalCase 的Verb-Noun。新版统一成小写rvs — rust-verb-shell (v26.7.12) no sandbox (full FS access). use --sandbox DIR to restrict. commands use verb-noun style (get-child-item, set-location, ...). aliases: ls / cd / pwd / cat / mkdir / rm / echo / clear; exit to quit.这是个小事但它涉及一个判断文档里举的例子要和工具实际接受的输入完全一致否则 AI 和人类都会被带偏。二、借鉴 ripgrepsearch-content重写rvs 早期的search-content别名sc/grep是最小可用版自写collect_files递归遍历硬编码跳过.git/target/node_modules单线程搜。这版能跑但有两个问题噪音目录硬编码换个项目就失效不读.gitignore搜一次能把target/debug/里几百 MB 的编译产物全扫一遍新版直接换成 ripgrep 同款的ignorecrate 做目录遍历再上rayon多文件并行。ripgrep 的四重默认过滤全都到位尊重.gitignore/.ignore/.git/info/exclude/ 全局 gitignore默认跳过隐藏文件.开头默认跳过二进制文件启发式 NUL 字节检测不跟随符号链接渐进关闭过滤rg-u/-uu/-uuuripgrep 用户熟悉-u叠加-u关 ignore-uu再加 hidden-uuu等同grep -r。rvs 参数解析层不支持-u叠加所以用显式 switch 对应rg 写法rvs 写法语义rg patsc --pattern pat默认四重过滤rg -u patsc --pattern pat --no-ignore关.gitignorerg -uu patsc --pattern pat --no-ignore --hidden再加隐藏文件rg -uuu patsc --pattern pat --no-ignore --hidden --binary再加二进制-u是--no-ignore的短别名方便记忆。三、上下文行与多文件并行上下文行--context N/--before N/--after NAgent 搜到一个匹配通常要看上下文才能判断“这是不是我要找的”。新版加了上下文行输出 Table 里多Before和After字段ListStrsc --pattern pub struct --path crates --include *.rs --context 1--context N同时给前后 N 行--before N/--after N单独控制。多文件并行rayon的par_iter让多个文件并行搜索。--max-results用AtomicUsize跨线程计数超过上限就提前停。单文件搜索不并行避免小文件场景的线程开销。四、get-versionrvs 自身可观测性这个命令的背景是一次排错源码和 locale 都改了但 wezterm 新开的标签页还是显示旧 banner。绕了好几条命令才定位到——旧二进制没重编而 rvs 自己没有任何机制让 Agent 一眼看清“现在跑的是哪个二进制”。新版加了get-version别名ver/version通过编译时build.rs注入的信息回答这个问题rvs --json -c get-version输出简化{ Version: 26.7.12, BuildTime: 2026-07-25T14:56:08Z, GitCommit: 11e70c4, GitDirty: dirty, BuildHost: macos aarch64, Profile: debug }排错决策树因此变得很短跑get-version看BuildTime对比源码 mtime源码新于 BuildTime → 跑的是旧二进制需要cargo buildGitDirty字段额外告诉你当前二进制是从一个有未提交改动的工作区编出来的Agent 据此能判断“这个二进制能不能信任”。五、get-child-item --llm尊重 .gitignore喂对话式 LLM一个常见场景你在 wezterm 里想问 ChatGPT/Claude/元宝“这个项目大概是个啥”最自然的做法是把当前目录的文件列表 copy 进对话框。但ls的输出又长又乱——表格边框、target/、node_modules/、隐藏文件全混在一起贴进去几百行LLM 还要从噪音里捞信号。新版加了--llm模式get-child-item --llm别名ls --llm专门解决这个rvs -c get-child-item --llm --path crates/rvs-commands输出[F] Cargo.toml [F] build.rs [D] src/ [F] src/lib.rs[D]是目录、[F]是文件路径相对每行一个条目无表格边框。底层用ignore::WalkBuilder默认尊重.gitignore跳过target//node_modules/等噪音目录。工作流变成ls --llm→ 全选复制 → 粘到对话框。LLM 拿到的是干净的项目结构视图。六、wezterm-rvs.sh编译期间的双语进度提示这是 wezterm 用户的体验改进。旧版的启动包装脚本只在“二进制不存在”时编译于是出现了上面提到的 silent stale 问题——源码改了但新开的标签页还是跑旧二进制。新版策略每次启动跑cargo build --dry-run检测是否需要重编需要时先打印双语进度提示到 stdoutwezterm 直接可见避免黑屏假死rvs: source changed, rebuilding binary before launch… rvs检测到代码更改正在编译以获取最新二进制…编译完成后打印“启动中”编译失败打印[ERR] stderr 并退出cargo build --dry-run本身很快0.5s无变更时直接跳过有变更时先提示再编译让人类和 Agent 都知道发生了什么。-u是--no-ignore的短别名方便记忆。七、面向三类读者的速查人类开发者wezterm / 终端你要做什么rvs 命令别名列目录get-child-itemls列目录喂 LLM 用get-child-item --llmls --llm创建目录new-directory --path demomkdir demo创建文件new-file --path test.rstouch test.rs搜代码ripgrep 风格search-content --pattern foosc --pattern foo/grep foo搜代码带上下文sc --pattern foo --context 3—关 ignore 搜sc --pattern foo --no-ignoresc -u foo看 rvs 自身版本get-versionver/version切到 bashenter-shell bash—对话式 AIChatGPT / 腾讯元宝 / 豆包等当用户描述一个文件操作意图时对话 AI 应该生成 rvs 全小写 verb-noun 命令不要生成 PowerShell 的 PascalCaseGet-ChildItem也不要生成 POSIXls——后者只是别名rvs native 形式才是get-child-item。命令模板v26.7.12# 列目录 get-child-item [path] [-recurse] 列目录并尊重 .gitignore喂给对话式 LLM 用 get-child-item --llm [path] 读文件 get-content path 创建目录 / 文件注意new-item 已拆分 new-directory --path name new-file --path name 搜代码ripgrep 风格 search-content --pattern pat [--path dir] [--regex] [--include *.rs] [--no-ignore] [--hidden] [--binary] [--context N] [--before N] [--after N] 看 rvs 自身版本排错第一动作 get-version如果用户传入的指令是 POSIX 风格的管道如ls | grep foo提示用enter-shell bash切换到 bash 后再执行或用 rvs native 的get-child-item | where-object ...。代码 AgentVSCode Copilot / Trae IDE / AtomCode 等Agent 调用 rvs 时应走--json模式输出是合法 JSON无需额外解析# 单个命令 rvs --json -c get-child-item --llm 管道喂多行 echo -e get-location\nget-version | rvs --jsonrvs 行为异常时的第一动作来自 AGENTS.md 附录 C跑rvs --json -c get-version看BuildTime/GitCommit/Profile对比源码 mtime源码新于 BuildTime → 跑的是旧二进制需要cargo buildBuildTime ≥ 源码 mtime → 二进制是最新的问题在别处字符串检索grep 替代品Agent 在 rvs 里想搜代码时不要enter-shell bash跳出去用 grep。用 rvs 原生search-content别名sc/grep。沙盒内可用--json输出 Table{Path, Line, Content, Before?, After?}Agent 直接消费。八、一句话总结rvs v26.7.12 借鉴 ripgrep 的搜索ignorerayon-u渐进 --context 自身可观测get-version注入 BuildTime/GitCommit/BuildHost/Profile--llm输出尊重.gitignore喂对话式 LLM new-item拆成new-directory/new-file修 mkdir 创建文件的 bug。项目在 rust-verb-shell:基于 Rust 的 PowerShell 风格 Shell 项目 - AtomGit版本号 CalVerYY.M.P当前v26.7.12。

相关新闻

GPU 维保市场爆发:芯片级修复如何让算力“起死回生“

GPU 维保市场爆发:芯片级修复如何让算力“起死回生“

核心事件随着 AI 训练集群规模爆发式增长,GPU 算力卡的维修与维保需求正成为一个快速崛起的新兴市场。一张 H100 GPU 卡售价超过 3 万美元,当这些"天价"硬件出现故障时,"直接换新"的经济账让越来越多企业转向芯片级维修这…

2026/10/14 23:23:04 阅读更多 →
高效办公工具推荐,本地运行 OpenClaw 智能自动化解决方案(含安装包)

高效办公工具推荐,本地运行 OpenClaw 智能自动化解决方案(含安装包)

Windows 一键部署 OpenClaw 教程|5 分钟搭建本地 AI 智能体,摆脱繁琐配置 ✨核心亮点:零代码零基础|全可视化操作|免手动环境配置|内置全套依赖|28 万 Tokens 可用额度 Windows 安装包&#x…

2026/10/8 19:13:05 阅读更多 →
【原创】分布式之消息队列复习精讲

【原创】分布式之消息队列复习精讲

【原创】分布式之消息队列复习精讲 在分布式系统中,消息队列(Message Queue, MQ)是解耦、异步、流量削峰的核心组件。无论是微服务通信、事件驱动架构,还是大数据处理,MQ 都扮演着关键角色。本文将从实战出发&#xff…

2026/9/29 19:18:07 阅读更多 →

最新新闻

Claude Code 安装配置完全指南:从Node环境到终端AI编程助手

Claude Code 安装配置完全指南:从Node环境到终端AI编程助手

简介:面向开发者的Claude Code安装配置代码包,聚焦智能终端助手在Windows、macOS、Linux三平台下的部署与集成,帮助读者完成Node.js环境准备、全局安装、API密钥配置,并快速接入Visual Studio Code与JetBrains IDE。包体共3个文件…

2026/10/14 23:23:41 阅读更多 →
在线火山图绘制全攻略:从双色到四色的参数与实操

在线火山图绘制全攻略:从双色到四色的参数与实操

1. 先看懂火山图:坐标轴、阈值线、颜色的底层逻辑很多人上来就找按钮,先问“火山图在哪里”。我的建议是,先用两分钟理解这张图的坐标和阈值在说什么。你知道了每个参数背后的含义,在线工具里的选项就不会让你犯迷糊,出…

2026/10/14 23:23:41 阅读更多 →
大模型训练数据管线全拆解:从清洗去重到Tokenize分片

大模型训练数据管线全拆解:从清洗去重到Tokenize分片

1. 从数据视角切入大模型训练:为什么值得深挖做模型训练的人都有一个共识:架构决定上限,数据决定下限。很多人拿到一个开源大模型,第一反应是去看它的网络结构——注意力怎么设计的、位置编码用的什么方案、归一化放在哪里。但真正…

2026/10/14 23:23:41 阅读更多 →
手写Tool Use的三种实战方案:从字符串解析到AST沙箱

手写Tool Use的三种实战方案:从字符串解析到AST沙箱

1. “手写 Tool Use”到底在考什么:面试官没说破的三层潜台词“面试官让我手写一个 Tool Use,我用了 3 种方案”——这个标题乍看像段程序员日常吐槽,但背后藏着当前大模型应用开发岗位最核心的能力筛选逻辑。我带过十几轮校招和社招技术面&a…

2026/10/14 23:23:41 阅读更多 →
智能体五类伤害与三方责任:风险控制与实操指南

智能体五类伤害与三方责任:风险控制与实操指南

1. 从“智能体闯祸”说起:为什么五类伤害与三方责任值得每个从业者吃透智能体这两年被聊得很多,从自动订票、自动写代码,到在业务系统里替人做决策、调资源、发指令,能力边界一路外扩。但真正在一线做过落地的人都知道&#xff0c…

2026/10/14 23:23:41 阅读更多 →
Delphi中用TPaintBox生成显示二维码,并保存为PNG回读Image的完整实践

Delphi中用TPaintBox生成显示二维码,并保存为PNG回读Image的完整实践

1. 从画布到文件:为什么用PaintBox而不是直接放Image最近在做桌面端工具时,遇到一个挺典型的交互需求:界面某处要根据数据动态生成二维码,当场显示给用户看,同时提供一个“保存图片”的按钮,把二维码落盘。…

2026/10/14 23:22:37 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/14 16:30:29 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 22:45:47 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/14 7:53:34 阅读更多 →