Skip to content

挺早之前就做了这个小东西(现在出现了功能更强大的替代品,如 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的内容大致长这样(节选):

markdown
=== 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

bat
g++ scan_project.cpp -o scan_project.exe -std=c++17 -lstdc++fs -static

方案 B:问我要二进制文件,然后把它放到 PATH 里

scan_project.exe 丢进你的某个工具目录,并加入到系统 PATH。之后在任何项目根目录敲:

bat
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 - 你的项目,你做主

自定义要排除的目录

直接把这串列表改了就行:

cpp
{"node_modules",".git",".svn",".hg","dist","build","out","target","__pycache__",".venv","venv","env",".vscode",".idea"}

扩展文件类型白名单

EXTS 里加后缀(记得小写),例如:

cpp
".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。你只负责「提问要准确」,答案自然就更准


这种小工具应该没必要提供可执行文件吧。