Skip to content

写作时间统计面板

⚠️ 免责声明:本文档由 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),启用近似模式:

  1. 初始化:使用字符长度 × 2 快速估算初始字数
  2. 增量更新:仅跟踪字符变化量(增减)
  3. 定期校准:每隔一段时间或一定变化次数后精确校准

配置选项

配置说明默认值
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, .idea
  • dist, build, out

写作统计仪表板

仪表板视图

打开仪表板显示:

区域内容
顶部统计累计用时、今日用时、今日平均/峰值速度
速度曲线图当前文件的速度随时间变化
今日柱状图今日 24 小时字数分布
热力图最近 52 周每日写作活动
今日15分钟粒度今日每 15 分钟的字数分布

热力图

  • 横轴:星期(周一到周日)
  • 纵轴:时间(最近 52 周)
  • 颜色:字数越多颜色越深

今日分析

  • 每小时柱状图:显示今日每个小时的字数
  • 15分钟粒度:更细粒度的今日活动分布

配置选项

在 VS Code 设置中搜索 AndreaNovelHelper.timeStats

基本设置

配置项说明默认值
enabledLanguages统计的语言['markdown', 'plaintext']
idleThresholdMs空闲超时(毫秒)30000
bucketSizeMs桶大小(毫秒)60000
imeDebounceMsIME 去抖时间(毫秒)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遵循 .wcignorefalse
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/ 目录。

常见问题

统计不准确?

  1. 检查是否启用了大文件近似模式
  2. 确认空闲检测设置是否合适
  3. 检查 .wcignore 规则
  4. 尝试手动刷新

里程碑不提醒?

  1. 确认里程碑功能已启用
  2. 检查目标设置是否正确
  3. 查看已达成里程碑列表
  4. 确认提醒类型设置

仪表板不显示数据?

  1. 确认当前有活动文档
  2. 检查文档语言是否在启用列表中
  3. 等待数据加载

大文件卡顿?

  1. 启用大文件近似模式
  2. 增加校准间隔
  3. 减小桶大小
  4. 关闭调试模式

命令列表

命令说明
AndreaNovelHelper.openTimeStats打开写作统计仪表板
AndreaNovelHelper.exportTimeStatsCSV导出时间统计为 CSV

相关功能