写作时间统计面板
⚠️ 免责声明:本文档由 GLM4.7 自动生成,内容可能存在错误或不完整之处。请以人工书写的官方文档为准。
写作时间统计面板用于跟踪你的写作时间、速度和字数增长。支持会话管理、里程碑提醒、热力图等功能。
打开方式
命令面板
按 Ctrl+Shift+P 打开命令面板,输入 Andrea Novel Helper: 打开写作统计仪表板。
状态栏
点击状态栏中的时间统计图标。
功能概述
核心功能
| 功能 | 说明 |
|---|---|
| 实时速度追踪 | 当前速度、平均速度、峰值速度(CPM/CPH) |
| 时间统计 | 累计写作时间、今日写作时间 |
| 会话管理 | 自动追踪写作会话,支持空闲检测 |
| 里程碑提醒 | 达到字数目标时自动提醒 |
| 热力图 | 最近 52 周的写作活动热力图 |
| 今日分析 | 今日每小时、每15分钟的字数分布 |
| 大文件支持 | 近似统计模式,避免阻塞 |
状态栏显示
显示模式
| 模式 | 显示内容 |
|---|---|
| 详细 (detailed) | 速度/平均/峰值 CPM · 累计分钟 (mm:ss) · CJK字数 ROMA词数 总字数 🖋️ |
| 半精简 (semi) | 速度 CPM · 总字数 🖋️ |
| 精简 (compact) | 总字数 🖋️ |
状态指示
| 图标 | 说明 |
|---|---|
| 🖋️ | 活跃写作状态 |
| 💤 | 空闲状态 |
| ≈ | 大文件近似模式(字数为估算值) |
状态栏悬停信息
悬停显示详细数据:
- 当前速度(字/分钟、字/小时)
- 平均速度、峰值速度
- 累计用时(分钟、mm:ss 格式)
- 当前会话持续时间
- 中文字符、英文单词
- 三种字数统计方式
- 文件路径、最后活动时间
- 会话数、状态
会话管理
自动会话追踪
系统自动管理写作会话:
| 事件 | 效果 |
|---|---|
| 开始编辑 | 自动开始新会话 |
| 空闲超时 | 自动结束会话 |
| 切换文件 | 结束旧会话,开始新会话 |
| 窗口失焦 | 暂停会话计时 |
| 关闭文件 | 结束会话并保存 |
空闲检测
| 配置 | 说明 |
|---|---|
idleThresholdMs | 空闲超时时间(默认 30 秒) |
exitIdleOn | 退出空闲状态的条件 |
退出空闲状态选项
| 选项 | 触发条件 |
|---|---|
text-change | 只有文本变化时 |
window-focus | 窗口获得焦点或文本变化时 |
editor-change | 编辑器切换、窗口获得焦点或文本变化时 |
桶聚合
系统将写作时间分割为固定大小的桶(默认 60 秒),用于:
- 计算峰值速度
- 生成速度曲线图
- 生成热力图数据
空闲状态下不会创建新桶,节省存储空间。
速度统计
三种速度类型
| 类型 | 说明 |
|---|---|
| 当前速度 | 使用滑动窗口算法,考虑最近 3 个桶的加权平均 |
| 平均速度 | 总字数 ÷ 总时间 |
| 峰值速度 | 单个桶的最高速度 |
速度单位
| 配置 | 说明 |
|---|---|
speedUnit: 'cpm' | 字/分钟 |
speedUnit: 'cph' | 字/小时 |
里程碑功能
里程碑目标
配置字数目标,达到时自动提醒:
json
{
"AndreaNovelHelper.timeStats.milestone.targets": [
1000, 2000, 5000, 10000, 20000, 50000, 100000
]
}提醒类型
| 类型 | 说明 |
|---|---|
information | 右下角提示(非阻塞) |
modal | 模态对话框(阻塞) |
里程碑持久化
- 已达成的里程碑会持久化保存
- 即使关闭 VS Code 后重新打开,不会重复提醒
- 每个文件独立记录里程碑
大文件近似模式
工作原理
对于大文件(默认 > 64KB),启用近似模式:
- 初始化:使用字符长度 × 2 快速估算初始字数
- 增量更新:仅跟踪字符变化量(增减)
- 定期校准:每隔一段时间或一定变化次数后精确校准
配置选项
| 配置 | 说明 | 默认值 |
|---|---|---|
largeFile.thresholdBytes | 启用近似模式的阈值 | 65536 (64KB) |
largeFile.approximate | 是否启用近似模式 | true |
largeFile.accurateEveryChanges | 每 N 次变化精确校准 | 80 |
largeFile.accurateEveryMs | 每 N 毫秒精确校准 | 60000 (60秒) |
状态指示
使用 ≈ 符号标识近似模式:
总计 ≈12345字(词计) 🖋️超大文件警告
超过 50MB 的文件会提示:
该大文件已启用 TimeStats 近似统计,其他高成本高亮功能已被跳过。
粘贴统计控制
是否计入粘贴
| 配置 | 说明 | 默认值 |
|---|---|---|
includePasteInSpeed | 粘贴是否计入速度统计 | false |
includePasteInAddedCounters | 粘贴是否计入新增字数 | true |
粘贴检测
- 单次粘贴 ≥ 32 字符(可配置)视为粘贴
- 粘贴内容会被标记,可选择是否计入统计
.wcignore 支持
忽略规则
启用 respectWcignore 后:
- 符合
.wcignore规则的文件不计入时间统计 - 忽略文件的字数会单独聚合
预制规则
常用目录默认忽略:
node_modules,.git,.vscode,.ideadist,build,out
写作统计仪表板
仪表板视图
打开仪表板显示:
| 区域 | 内容 |
|---|---|
| 顶部统计 | 累计用时、今日用时、今日平均/峰值速度 |
| 速度曲线图 | 当前文件的速度随时间变化 |
| 今日柱状图 | 今日 24 小时字数分布 |
| 热力图 | 最近 52 周每日写作活动 |
| 今日15分钟粒度 | 今日每 15 分钟的字数分布 |
热力图
- 横轴:星期(周一到周日)
- 纵轴:时间(最近 52 周)
- 颜色:字数越多颜色越深
今日分析
- 每小时柱状图:显示今日每个小时的字数
- 15分钟粒度:更细粒度的今日活动分布
配置选项
在 VS Code 设置中搜索 AndreaNovelHelper.timeStats:
基本设置
| 配置项 | 说明 | 默认值 |
|---|---|---|
enabledLanguages | 统计的语言 | ['markdown', 'plaintext'] |
idleThresholdMs | 空闲超时(毫秒) | 30000 |
bucketSizeMs | 桶大小(毫秒) | 60000 |
imeDebounceMs | IME 去抖时间(毫秒) | 350 |
状态栏设置
| 配置项 | 说明 | 默认值 |
|---|---|---|
statusBar.alignment | 对齐方式 | left |
statusBar.priority | 优先级 | 100 |
大文件设置
| 配置项 | 说明 | 默认值 |
|---|---|---|
largeFile.thresholdBytes | 大文件阈值 | 65536 |
largeFile.approximate | 启用近似模式 | true |
largeFile.accurateEveryChanges | 校准间隔(变化次数) | 80 |
largeFile.accurateEveryMs | 校准间隔(毫秒) | 60000 |
里程碑设置
| 配置项 | 说明 | 默认值 |
|---|---|---|
milestone.enabled | 启用里程碑 | true |
milestone.targets | 目标字数数组 | [1000, 2000, 5000, ...] |
milestone.notificationType | 提醒类型 | information |
其他设置
| 配置项 | 说明 | 默认值 |
|---|---|---|
respectWcignore | 遵循 .wcignore | false |
persistReadOnlySessions | 持久化纯阅读会话 | false |
includePasteInSpeed | 粘贴计入速度 | false |
includePasteInAddedCounters | 粘贴计入新增字数 | true |
pasteThresholdChars | 粘贴阈值字符数 | 32 |
debug | 调试模式 | false |
数据存储
存储位置
写作统计数据保存在 novel-helper/.anh-fsdb/writing-stats/ 目录。
数据结构
typescript
interface FileStats {
totalMillis: number; // 累计毫秒数
charsAdded: number; // 新增字符数
charsDeleted: number; // 删除字符数
firstSeen: number; // 首次看到时间
lastSeen: number; // 最后活动时间
buckets: Bucket[]; // 桶数组
sessions: Session[]; // 会话数组
achievedMilestones?: number[]; // 已达成的里程碑
}导出数据
导出 CSV
使用命令 Andrea Novel Helper: 导出时间统计为 CSV:
csv
filepath,totalMillis,charsAdded,charsDeleted,lastActiveTime,sessionsCount,averageCPM
"D:\path\to\file.md",3600000,5000,100,1734567890000,5,83导出文件保存在 novel-helper/ 目录。
常见问题
统计不准确?
- 检查是否启用了大文件近似模式
- 确认空闲检测设置是否合适
- 检查
.wcignore规则 - 尝试手动刷新
里程碑不提醒?
- 确认里程碑功能已启用
- 检查目标设置是否正确
- 查看已达成里程碑列表
- 确认提醒类型设置
仪表板不显示数据?
- 确认当前有活动文档
- 检查文档语言是否在启用列表中
- 等待数据加载
大文件卡顿?
- 启用大文件近似模式
- 增加校准间隔
- 减小桶大小
- 关闭调试模式
命令列表
| 命令 | 说明 |
|---|---|
AndreaNovelHelper.openTimeStats | 打开写作统计仪表板 |
AndreaNovelHelper.exportTimeStatsCSV | 导出时间统计为 CSV |