yoinks历史文件在哪里?history.json存储结构完全解析
【免费下载链接】yoinksyoink any video from your terminal. no shady ads.项目地址: https://gitcode.com/GitHub_Trending/yo/yoinks
yoinks 历史文件(即history.json)是这款终端视频下载工具用来记住你下载过哪些链接的"记忆库"。yoinks 让你粘贴链接即可下载 YouTube、X、TikTok 等 1800+ 平台的视频,而历史功能则让重复下载同一个链接只需按一下↑ 键就能召回。这篇指南带你彻底搞懂:历史文件存在哪、内部结构长什么样、以及那些隐藏的运行规则。
历史文件存储位置:一个固定的隐藏路径
yoinks 的历史记录保存在当前用户主目录下的固定位置:
~/.config/yoinks/history.json这个路径由 src/lib/history.ts 一行代码写死:
const HISTORY_FILE = path.join(os.homedir(), '.config', 'yoinks', 'history.json')几个要点:
- 🔍不是全局共享的:
os.homedir()决定了每个系统用户各自拥有一份独立历史,互不干扰 - 📁目录自动创建:首次写入历史时会自动执行
mkdir -p ~/.config/yoinks,你无需手动建目录 - 🪟全平台一致:Linux / macOS / Windows 下规则相同(Windows 上即
%USERPROFILE%\.config\yoinks\history.json)
history.json 内部结构:一个简单的字符串数组
很多人以为历史文件会记录下载时间、文件路径、分辨率等复杂信息,但实际上——它只是一个纯 URL 字符串数组,没有对象、没有时间戳:
[ "https://www.youtube.com/watch?v=dQw4w9WgXcQ", "https://x.com/user/status/1234567890", "https://www.tiktok.com/@creator/video/987654321" ]源码 src/lib/history.ts#L22 负责序列化,格式上有两个小细节:
| 特征 | 说明 |
|---|---|
| 缩进 | JSON.stringify(next, null, 2),统一 2 空格缩进,方便人手读 |
| 结尾 | 文件末尾固定追加一个换行符\n,符合 Unix 文本习惯 |
| 顺序 | 最新的链接永远在数组第一个(头部插入) |
也就是说,整个历史文件可以被理解为:"按时间倒序排列的去重 URL 列表"。
历史存储背后的三条隐藏规则
写入逻辑全部集中在 addToHistory 函数里,拆开看有 3 条规则:
规则一:头部插入 + 自动去重
const next = [url, ...loadHistory().filter(entry => entry !== url)].slice(0, LIMIT)- 每次成功下载后,URL 被插到数组最前面
- 如果该链接已经在历史里,旧的那条会被过滤掉——所以同一链接无论下载多少次,历史里始终只占一行
规则二:硬性上限 50 条
const LIMIT = 50slice(0, LIMIT)保证数组永远不超过 50 个元素,超出部分(最旧的链接)会被静默丢弃。这意味着 history.json 的体积被天然锁死在很小的范围内,不用担心它无限膨胀。
规则三:坏了也不误事,下载永远优先
这是整个模块最精妙的设计。读取端 loadHistory 和写入端都包在try/catch里:
- 文件不存在、JSON 损坏、目录无权限→ 读取直接返回空数组,相当于"没有历史",工具照常工作
- 过滤时会剔除所有非字符串条目(
typeof entry === 'string'),手动改坏文件也只会少几条记录,不会崩溃 - 源码注释写得很直白:"history is a nicety — never let it break a download"(历史只是锦上添花,绝不能让它毁掉下载)
所以如果你不小心把 history.json 改乱了,最坏的结果也只是历史功能"失忆",下次下载成功后文件会被重建。
实战:如何在终端里用上这份历史
下载完成的那一刻,链接就自动写入了历史文件(见 src/app.tsx#L276 中的setHistory(addToHistory(url)))。使用方式非常简单:
- 运行
yoinks进入首页,光标停在输入框 - 按一下↑ 键——底部提示栏出现
↑ history时,输入框就会回填最近一次下载的链接 - 连续按 ↑ 依次回溯更早的记录;按↵直接重新下载
- 回填逻辑由 src/components/text-input.tsx 实现:按 ↑ 之前你正在输入的内容会被暂存,按 ↓ 可以回到暂存状态,不会误删你打了一半的文字
想彻底清空历史?直接删除~/.config/yoinks/history.json即可,下次启动时 yoinks 会自动从零开始记录。
快速总结
| 问题 | 答案 |
|---|---|
| 历史文件在哪? | ~/.config/yoinks/history.json |
| 内部结构? | 纯 URL 字符串数组,2 空格缩进,末尾带换行 |
| 容量上限? | 50 条,超出丢弃最旧 |
| 重复下载会重复记录吗? | 不会,自动去重且置顶 |
| 文件损坏怎么办? | 自动降级为空历史,不影响下载 |
| 如何召回历史? | 首页按 ↑ 键 |
至此,yoinks 的history.json从存储路径到内部结构就完全解析清楚了:一个极简、自修复、永不阻塞下载的小小记忆系统。
【免费下载链接】yoinksyoink any video from your terminal. no shady ads.项目地址: https://gitcode.com/GitHub_Trending/yo/yoinks
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考