挺早之前就做了这个小东西(现在出现了功能更强大的替代品,如 Repomix 等),不过这个小工具应该能满足小项目的大部分需求(有时候没必要用 Augment Code 或者 Cursor 之类的)。所以补发一下。
之后可能会用 Rust 写一版跨平台的
一键传送门:Gist
背景
给 AI 提问:
“这是我整个项目,帮我看下 bug 在哪儿?”
现实往往是:
- 复制几段文件?重复操作累。AI 没上下文,追问半天。
node_modules
一股脑带上?噪音 99%,token 烧成灰。
于是我写了一个小而实用的工具:把需要的东西自动串联起来,一次性贴给 AI。
这个工具做了什么
- 树状目录:先输出整个项目的目录树(已过滤垃圾目录)。
- 逐文件内容:随后按相对路径逐个输出文本/代码文件内容。
- Markdown 友好:每个文件外层自动加上 ``` 代码块,并按后缀猜测语言(如
cpp/python/js
)。 - 一键上剪贴板:生成的整段文本直接进剪贴板,到聊天框Ctrl+V 即可发。
- 安全一点点:不含绝对路径,减少隐私泄露风险;默认忽略
node_modules/.git/dist/build/...
。
准备工具
- Windows 10/11
- 一个支持 C++17 的编译器(VS / MSVC、MinGW-w64 等皆可)
- 你的小项目(最好是源码文本为主)
Round 1 - 先上效果
生成的粘贴给 AI的内容大致长这样(节选):
=== Folder Structure ===
my-project
+---src
| +---app
| | \---main.cpp
| \---utils
| \---fs.hpp
+---README.md
\---.vscode
\---settings.json
=== File Contents ===
====================================================
文件: README.md
====================================================
```markdown
# my-project
一个示例项目,用于演示如何将项目结构+源码一键打包给 AI。
```
====================================================
文件: src\app\main.cpp
====================================================
```cpp
#include "utils/fs.hpp"
int main() { /* ... */ }
```
AI 一眼就能获得:“目录结构 → 关键文件全文” 的完整上下文。
Round 1.5 - 怎么运行
方案 A:自己编译(推荐)
保存源码为 scan_project.cpp
(下文有核心片段),然后编译:
MinGW-w64
g++ scan_project.cpp -o scan_project.exe -std=c++17 -lstdc++fs -static
方案 B:问我要二进制文件,然后把它放到 PATH 里
把 scan_project.exe
丢进你的某个工具目录,并加入到系统 PATH。之后在任何项目根目录敲:
scan_project.exe
# 或者:
scan_project.exe D:\work\your-project
运行完毕后,直接 Ctrl+V 粘贴给 AI。
Round 2 - 它的“脑回路”
- 遍历:用 C++17 的
<filesystem>
做深度优先遍历。 - 过滤:遇到目录名在黑名单(
node_modules/.git/dist/build/out/target/__pycache__/...
)里,整棵子树跳过。 - 识别:只采集文本/代码后缀(
.cpp/.py/.md/.json/...
),避免把二进制塞爆剪贴板。 - 排版:前半段输出树状目录;后半段按相对路径输出完整文件内容,每个文件前后套一层 ```,并根据扩展名猜语言。
- 收尾:把所有文本拼成一个大字符串,喂给 Windows 剪贴板。
Round 3 - 你的项目,你做主
自定义要排除的目录
直接把这串列表改了就行:
{"node_modules",".git",".svn",".hg","dist","build","out","target","__pycache__",".venv","venv","env",".vscode",".idea"}
扩展文件类型白名单
往 EXTS
里加后缀(记得小写),例如:
".r",".tex",".scala",".kts",".toml",".yml",".rst",".csv"
只想看“关键目录”?
最简单的做法是:把不重要的目录统统加入黑名单。凡是能不看就不看,token 就是省出来的。
常见问题(FAQ)
Q:剪贴板容量有限,会不会粘不过去?
A:非常大的项目可能会贴不全,建议适当扩展过滤清单,或挑关键目录分多次粘贴(比如先src/
,再config/
等)。Q:某些文件是 GBK/GB2312,中文会花吗?
A:程序按字节读文件并按 UTF-8 粘到剪贴板。非 UTF-8 文件可能会出现乱码。建议把项目文件统一成 UTF-8(VSCode 一键转)。Q:Linux/macOS 可用吗?
A:核心遍历逻辑是跨平台的;剪贴板部分依赖 Windows API。在 *nix 上可改成调用xclip/pbcopy
等即可。Q:会不会泄露绝对路径?
A:输出统一为相对路径。你也可以把任何涉及隐私的目录名加入黑名单。
结语
写它的初心很简单:把“把项目讲清楚”这件事变成一次 Ctrl+V。
剩下的,交给 AI。你只负责「提问要准确」,答案自然就更准。
这种小工具应该没必要提供可执行文件吧。