☰
i-have-adhd:用命令行工具对抗注意力涣散,提升开发效率
2026/10/10 13:56:05 网站建设 项目流程

1. 从“i-have-adhd”这个标题说起:一个被严重低估的效率工具

第一次看到“i-have-adhd”这个标题,很多人会以为这是某个医学诊断工具或者心理测试应用。但如果你在开发者社区混过一段时间,就会知道这其实是一个在GitHub上悄悄火起来的开源项目——它做的事情非常纯粹:帮助注意力容易分散的人,用命令行管理自己的任务和专注时间。

我最初接触这个项目是在一个技术群里,有人抱怨自己“打开IDE写了三行代码,然后刷了四十分钟手机”。底下有人甩了这个项目的链接,说“你试试这个,比那些花里胡哨的番茄钟管用”。我当时的第一反应是:命令行工具能解决注意力问题?这不是开玩笑吗?但用了一周之后,我改变了看法。

这个项目的核心逻辑并不复杂:它把“任务管理”和“专注计时”压缩到了极简的终端交互里。你不需要打开浏览器、不需要登录账号、不需要在十几个标签页之间切换。一条命令添加任务,一条命令开始专注,一条命令查看今天做了什么。整个过程不超过三秒,而这三秒的极低操作成本,恰恰是注意力容易分散的人最需要的——因为任何多余的点击和跳转,都可能成为分心的入口。

这篇文章适合几类人看:如果你经常在写代码时突然想去查一个“好像很重要”的资料,结果半小时后发现自己在看完全不相关的东西;如果你试过各种待办事项应用,但最后都因为“打开太麻烦”而放弃;如果你对命令行工具有天然的好感,但又不想折腾复杂的配置——那这个项目值得你花二十分钟了解一下。我会从它的设计逻辑、安装配置、核心命令、实际使用中的坑,以及如何根据自己的习惯做定制这几个角度,把我知道的全部倒出来。

2. 为什么一个终端工具能对抗注意力涣散

2.1 注意力容易分散的人,到底需要什么样的工具

在聊这个项目之前,我想先说说一个反直觉的观察:大多数效率工具之所以失败,不是因为功能不够,而是因为功能太多。你打开一个待办应用,首页有今日任务、本周计划、项目看板、标签系统、优先级矩阵、协作空间……光是决定“把这件事记在哪里”就要花掉半分钟。对于注意力容易分散的人来说,这半分钟就是灾难的开始。

我自己的经历很典型。我曾经用过一款很流行的任务管理软件,花了整整一个周末配置标签、建立项目、设置提醒规则。结果周一早上,我打开它准备记录第一件事,发现要选项目、选标签、选截止日期、选优先级——我关掉了它,打开备忘录随便写了一行。那个精心配置的系统,此后再也没有打开过。

所以,注意力容易分散的人真正需要的工具,必须满足三个条件:启动成本极低、操作路径极短、反馈即时可见。启动成本低意味着不需要登录、不需要同步、不需要等待加载;操作路径短意味着从“想到一件事”到“记录下来”不超过两个动作;反馈即时意味着完成一个任务后能立刻看到某种形式的确认,而不是要刷新页面或者等同步完成。

“i-have-adhd”这个项目在设计上几乎完美地命中了这三点。它是一个纯命令行工具,安装后直接在终端里运行。添加任务就是一行命令加一段文字,开始专注就是一行命令加一个时长。没有账号系统,没有云同步,没有花哨的界面。所有数据存在本地的一个纯文本文件里,你甚至可以用cat命令直接查看。

2.2 命令行交互的“低摩擦”优势

有人可能会问:命令行不是更麻烦吗?要记命令、要敲键盘,哪有图形界面点一下方便?这个问题我一开始也想过,但实际用下来发现,对于高频重复的简单操作,命令行的效率远高于图形界面。

举个例子。在图形界面里添加一个任务,典型流程是:找到应用图标(或者切换窗口)→ 点击“新建任务”按钮→ 在弹出的表单里填写内容→ 选择项目/标签/日期→ 点击保存。整个过程至少五步,而且每一步都需要视觉定位和鼠标移动。而在命令行里,添加任务就是:

adhd add "修复登录页面的表单验证"

回车,完成。没有表单,没有下拉菜单,没有保存按钮。你的手不需要离开键盘,眼睛不需要在屏幕上寻找按钮。这种“肌肉记忆式”的操作,在频繁记录任务时优势极其明显。

更重要的是,命令行工具天然具有可组合性。你可以把添加任务的命令写进脚本里,可以设置别名来进一步缩短命令,可以用管道把其他工具的输出直接变成任务。这种灵活性是图形界面很难提供的。

2.3 本地纯文本存储带来的意外好处

这个项目把数据存在本地纯文本文件里,这个选择乍看很“原始”,但实际用起来有几个意想不到的好处。

第一是零延迟。读写本地文件的速度是微秒级的,你敲完命令回车,结果立刻出现。相比之下,任何需要网络请求的工具都会有可感知的延迟,而这种延迟在注意力脆弱的时候足以让人分心。

第二是可版本控制。你可以把任务文件放进Git仓库,每天自动提交一次。这样你不仅能看到自己每天完成了什么,还能回溯过去几周甚至几个月的工作节奏。我自己就这么干的,每周回顾的时候用git log看一眼,比任何统计图表都直观。

第三是数据完全属于自己。没有账号被封的风险,没有服务停运的担忧,没有隐私泄露的可能。文件就在你的硬盘上,你想怎么处理就怎么处理。对于注重数据主权的人来说,这一点非常重要。

第四是可以用任何工具处理。因为是纯文本,你可以用grep搜索、用awk统计、用sed批量修改。我写了一个小脚本,每周日晚上自动统计本周完成的任务数量,然后发一封邮件给自己。这种自由度是封闭系统给不了的。

3. 从零开始:安装与初始配置的完整路径

3.1 环境准备与安装方式选择

这个项目本质上是一个命令行工具,安装方式取决于你的操作系统和包管理器。根据我在不同机器上安装的经验,有几种常见路径。

如果你用的是macOS,并且已经装了Homebrew,那最简单的方式是通过brew安装。不过需要注意的是,这个项目在Homebrew的官方仓库里不一定有,可能需要先添加第三方tap。我建议先运行brew search adhd看看有没有现成的formula,如果没有,再考虑从源码安装。

Linux用户的情况稍微复杂一些,因为不同的发行版包管理器不同。Debian/Ubuntu系可以用apt,Fedora/RHEL系可以用dnf,Arch系可以用pacman。但同样,这个工具不一定在所有发行版的官方仓库里。我的建议是优先检查官方仓库,如果没有,再走源码编译的路子。

Windows用户需要注意,这个工具原生是为Unix-like系统设计的,在Windows上运行需要WSL或者类似的兼容层。如果你不想折腾WSL,可以考虑用Git Bash或者MSYS2,但体验可能不如原生Linux流畅。

从源码安装的通用步骤是这样的:

git clone https://github.com/某开发者/i-have-adhd.git cd i-have-adhd make install

这里有一个坑需要提前说:make install默认会安装到/usr/local/bin,如果你没有写权限,会报错。解决办法是加sudo,或者修改Makefile里的安装路径到你的用户目录下。我个人倾向于后者,因为不需要提权,也更干净。

安装完成后,运行adhd --version确认一下。如果提示“command not found”,说明安装路径不在你的PATH环境变量里。这时候需要手动把安装目录加到PATH中,具体做法取决于你用的shell——bash用户改~/.bashrc,zsh用户改~/.zshrc。

3.2 初始化配置:让工具适应你的习惯

安装完成后,第一次运行adhd init会引导你完成初始配置。这个步骤会创建数据目录和配置文件。默认情况下,数据目录在~/.local/share/adhd/,配置文件在~/.config/adhd/config。

配置文件是纯文本格式,用简单的键值对存储设置。我建议在初始化完成后立刻打开看看,因为默认配置不一定适合每个人。几个我调整过的关键配置项:

数据文件路径。默认路径在用户主目录下,如果你有多个设备或者想把数据放在同步目录里,可以改成其他位置。但要注意,如果你用了云同步服务,频繁的读写可能会产生冲突。我的做法是本地保留一份,每天定时备份到同步目录。

默认专注时长。这个工具默认的专注时长是25分钟,也就是经典的番茄钟时长。但25分钟对我不太适用,因为我进入状态比较慢,前10分钟基本在热身。我把它改成了45分钟,这样中间有足够的时间进入深度状态。

任务完成后的行为。默认情况下,完成任务后工具会打印一行确认信息然后退出。你可以配置成完成后自动开始下一个任务,或者显示今日统计。我选择的是显示今日完成数量,这样能给我一个即时的正反馈。

日期格式。这个工具支持多种日期格式,默认是ISO 8601(YYYY-MM-DD)。如果你习惯其他格式,可以在配置里改。但我要提醒一句:如果你打算用脚本处理数据,ISO格式是最省事的,因为它是可排序的。

配置修改后不需要重启任何服务,下次运行命令时自动生效。这一点比很多需要reload配置的工具方便。

3.3 验证安装是否成功:一个最小化测试流程

安装和配置完成后,建议跑一个最小化测试流程,确认所有功能正常。这个流程我总结为“四个一”:

添加一个任务:

adhd add "测试任务"

列出所有任务:

adhd list

你应该能看到刚才添加的任务,状态是“待办”。

开始一个短时专注:

adhd focus 1

这里1表示1分钟。工具会进入计时状态,终端会显示倒计时。

标记任务完成:

adhd done 1

这里的1是任务ID,从adhd list的输出里可以看到。

如果这四步都顺利执行,说明安装配置没有问题。如果某一步报错,根据错误信息排查。最常见的错误是权限问题(数据目录不可写)和路径问题(命令找不到)。

注意:这个工具的任务ID是递增的,删除任务后ID不会回收。所以如果你频繁添加和删除任务,ID会越来越大。这不是bug,是设计如此,目的是保证ID的唯一性。

4. 核心命令的实战用法与参数详解

4.1 任务管理:add、list、done、remove的完整用法

这个项目的任务管理命令只有四个,但每个都有一些值得注意的细节。

adhd add是最常用的命令。基本用法是adhd add "任务描述"。但你可能不知道的是,它支持在描述里嵌入元信息。比如:

adhd add "写周报 #工作 @周五"

这里的#工作会被解析为标签,@周五会被解析为截止日期。这个功能在需要分类和排期的时候非常有用。但要注意,标签和日期的解析规则取决于配置,默认情况下#开头的是标签,@开头的是日期。如果你在任务描述里本来就需要用这两个符号,可以用反斜杠转义。

adhd list默认列出所有未完成的任务。它有几个实用的参数:

  • adhd list --all:列出所有任务,包括已完成的
  • adhd list --tag 工作:只列出带特定标签的任务
  • adhd list --today:只列出今天到期的任务
  • adhd list --done:只列出已完成的任务

我常用的组合是adhd list --tag 工作 --today,这样能快速看到今天必须完成的工作任务。

adhd done标记任务完成。基本用法是adhd done <任务ID>。它支持一次标记多个任务,比如adhd done 1 2 3。这个功能在批量清理时很有用。

adhd remove删除任务。和done不同,remove是彻底删除,不留痕迹。我一般不建议用这个命令,因为保留已完成的任务记录有助于回顾。如果确实需要清理,可以用adhd archive把旧任务归档到另一个文件里。

这里有一个我踩过的坑:任务ID在每次添加新任务时都会变化。如果你在脚本里硬编码了任务ID,下次运行可能会操作到错误的任务。正确的做法是先通过adhd list获取当前ID,或者用标签和描述来匹配。

4.2 专注计时:focus命令的隐藏技巧

adhd focus是这个工具最有特色的功能。基本用法是adhd focus <分钟数>,比如adhd focus 45表示专注45分钟。

但它的实际行为比表面看起来复杂。当你运行这个命令后,工具会做几件事:首先检查当前是否有正在进行的专注会话,如果有,会提示你是否要中断;然后启动一个倒计时,在终端显示剩余时间;倒计时结束后,会播放一个提示音(如果配置了的话),并记录这次专注会话。

几个隐藏技巧:

关联任务。你可以在开始专注时指定一个任务ID,这样专注结束后会自动把这段时间记录到该任务上:

adhd focus 45 --task 3

自定义提示音。默认的提示音是终端响铃,但你可以配置成播放一个音频文件。我把它设成了一个很短的“叮”声,既不刺耳又能引起注意。

中途暂停。如果你在专注过程中需要临时离开,可以按Ctrl+Z暂停计时,回来后再按fg恢复。这个功能在接快递或者接电话时很有用。

专注统计。adhd stats命令会显示你的专注历史,包括每天的总专注时长、平均专注时长、最长专注记录等。我每周会看一次,了解自己的节奏变化。

提示:如果你在专注期间关闭了终端窗口,计时会中断,这次专注不会被记录。所以建议在开始专注前确认终端不会意外关闭。

4.3 数据导出与统计:stats和export的实用场景

adhd stats默认显示最近7天的统计。它支持--week、--month、--year参数来切换时间范围。输出格式是纯文本表格,包含日期、完成任务数、专注时长、专注次数等字段。

如果你需要更详细的数据,可以用adhd export导出为CSV格式:

adhd export --format csv --output tasks.csv

导出的CSV可以直接用Excel或者Python的pandas处理。我自己写了一个小脚本,每周日晚上自动导出数据,然后生成一张简单的折线图,看看本周的专注趋势。

这里有一个实用技巧:把export和cron结合。在crontab里加一行:

0 22 * * * /usr/local/bin/adhd export --format csv --output /home/user/adhd-$(date +\%Y\%m\%d).csv

这样每天晚上的10点会自动导出一份当天的数据,文件名带日期,方便回溯。

4.4 命令别名:把常用操作压缩到三个字母

这个工具的命令本身已经很短了,但如果你每天要运行几十次,还是可以进一步压缩。方法是在shell的配置文件里加别名。

我的.zshrc里有这几行:

alias a='adhd add' alias l='adhd list' alias f='adhd focus' alias d='adhd done'

这样添加任务就是a "任务描述",列出任务是l,开始专注是f 45,完成任务是d 3。每个操作都只需要一到两个按键加参数,几乎感觉不到摩擦。

但要注意,别名不要设得太短或者太通用,否则可能和系统里已有的命令冲突。比如a在某些系统里是alias的缩写,l是ls的常见别名。我建议先用type命令检查一下,确认没有冲突再设置。

5. 实际使用中遇到的坑与应对方案

5.1 数据文件损坏的预防与恢复

这个工具把数据存在一个纯文本文件里,好处是透明,坏处是如果文件损坏,所有任务都会丢失。我遇到过两次数据文件损坏的情况,一次是因为磁盘写入时断电,一次是因为我手动编辑时格式写错了。

预防措施很简单:定期备份。你可以写一个简单的脚本,每天把数据文件复制到一个备份目录,保留最近30天的版本。我的做法是用rsync同步到一个专门的备份文件夹,然后用find命令删除30天前的旧备份。

如果数据文件已经损坏,恢复的难度取决于损坏程度。如果是格式错误(比如某一行缺少必要的字段),可以手动编辑修复。如果是文件被截断或者乱码,那就只能从备份恢复了。这也是为什么我强烈建议开启自动备份。

注意:这个工具在写入数据时不是原子操作。如果写入过程中程序被强制终止,文件可能处于不一致状态。所以尽量不要在专注计时进行中强制关闭终端。

5.2 多设备同步的冲突处理

如果你在多台机器上使用这个工具,并且想把数据同步起来,就会遇到冲突问题。因为数据文件是纯文本,云同步服务(比如Dropbox、OneDrive)在检测到两端同时修改时,会生成冲突副本,而不是自动合并。

我的解决方案是:只在一台主力机器上写入,其他机器只读。具体做法是,主力机器上的数据文件放在同步目录里,其他机器通过符号链接指向同步目录里的文件。这样所有机器看到的都是同一份数据,但只有主力机器会修改它。

如果你确实需要在多台机器上写入,那就需要更复杂的方案,比如用Git做版本控制,每次修改前先pull,修改后push。但这会引入额外的操作步骤,可能抵消掉工具本身的低摩擦优势。我的建议是尽量避免多端写入,如果实在需要,就接受偶尔的冲突手动合并。

5.3 专注计时被意外中断后的数据一致性

前面提到过,专注计时期间关闭终端会导致计时中断。但还有一个更隐蔽的问题:如果计时中断时正好在写入数据,可能会导致数据文件里出现一条不完整的专注记录。

我遇到过这种情况:一条专注记录只有开始时间没有结束时间,导致统计时出现负数时长。修复方法是手动编辑数据文件,删掉那条不完整的记录。但更好的做法是预防:在开始专注前,确保终端不会因为超时或者误操作而关闭。

如果你用的是tmux或者screen,可以把专注会话放在一个独立的窗口里,这样即使你切换窗口或者断开SSH连接,计时也不会中断。这个方案我用了很久,非常稳定。

5.4 与其他工具链的集成注意事项

这个工具可以和其他命令行工具集成,但有一些细节需要注意。

和Git集成时,如果你把数据文件放进Git仓库,每次修改都会产生一个commit。如果修改频繁,commit历史会变得很冗长。我的做法是每天只commit一次,用一个cron任务在晚上自动执行。

和编辑器集成时,你可以配置快捷键来快速添加任务。比如在Vim里,可以映射一个快捷键,把当前行的内容作为任务添加。但这个功能需要写一点Vimscript,而且要注意转义特殊字符。

和通知系统集成时,你可以配置专注结束后发送一个系统通知。在Linux上可以用notify-send,在macOS上可以用osascript。这个功能在你不盯着终端的时候很有用。

6. 根据个人习惯做定制:配置、脚本与扩展

6.1 配置文件的关键字段解读

配置文件里有一些字段值得单独拿出来说,因为它们直接影响使用体验。

default_focus_duration:默认专注时长。前面说过,我改成了45分钟。但如果你刚开始用,建议先用默认的25分钟,适应一段时间后再调整。因为一下子从25分钟跳到45分钟,可能会让你在最后10分钟频繁看时间,反而影响专注。

auto_start_next:完成一个专注后是否自动开始下一个。默认是false。如果你开启了这个选项,要注意它会连续计时,中间没有休息。对于需要长时间深度工作的人来说可能有用,但大多数人还是需要中间休息一下。

sound_enabled:是否开启提示音。如果你在开放办公区工作,建议关掉提示音,改用视觉提示(比如终端标题闪烁)。这个选项在配置文件里可以随时切换。

date_format:日期显示格式。前面提过,如果你要用脚本处理数据,保持ISO格式最省事。但如果只是自己看,可以用更符合习惯的格式,比如MM/DD/YYYY。

tag_prefix和date_prefix:标签和日期的前缀符号。默认是#和@。如果你在任务描述里经常用到这两个符号,可以改成其他不常用的符号,比如!和%。

6.2 用shell脚本扩展功能的三个实例

这个工具本身功能有限,但通过shell脚本可以扩展出很多实用功能。我分享三个我自己在用的脚本。

每日回顾脚本。每天下班前运行,显示今天完成的任务和专注时长:

#!/bin/bash echo "今日完成:" adhd list --done --today echo "" echo "今日专注:" adhd stats --today

周报生成脚本。每周五下午运行,生成本周的工作摘要:

#!/bin/bash echo "本周完成任务数:" adhd list --done --week | wc -l echo "" echo "本周专注总时长:" adhd stats --week | grep "Total" | awk '{print $2}'

自动备份脚本。每天凌晨运行,备份数据文件:

#!/bin/bash BACKUP_DIR="$HOME/adhd-backups" mkdir -p "$BACKUP_DIR" cp "$HOME/.local/share/adhd/tasks.txt" "$BACKUP_DIR/tasks-$(date +%Y%m%d).txt" find "$BACKUP_DIR" -name "tasks-*.txt" -mtime +30 -delete

这三个脚本都很简单,但能显著提升使用体验。你可以把它们加到crontab里自动运行,也可以手动执行。

6.3 什么时候该换工具:一个诚实的评估

用了几个月之后,我对这个工具的优缺点有了比较清晰的认识。它适合的场景是:你主要在终端里工作,任务以技术相关为主,不需要复杂的协作和提醒功能。如果你符合这个画像,它会是一个很顺手的工具。

但它也有明显的局限。首先,它没有移动端,你没法在手机上查看任务。其次,它没有提醒功能,如果你忘了看任务列表,可能会漏掉一些事情。第三,它的统计功能比较基础,如果你需要详细的效率分析,可能需要自己写脚本处理数据。

所以我的建议是:把这个工具作为你工作流的一部分,而不是全部。我自己的做法是,日常的技术任务用这个工具管理,需要提醒的日程用系统日历,需要协作的项目用团队工具。每个工具各司其职,不追求用一个工具解决所有问题。

如果你发现自己用了两周之后,打开终端的频率明显下降,那可能说明这个工具不适合你的工作习惯。这时候不要勉强,换回你习惯的方式就好。工具是为人服务的,不是反过来。

6.4 从源码理解设计哲学:为什么这样写

如果你有兴趣看源码,会发现这个项目的代码量很小,核心逻辑可能只有几百行。但正是这种克制,体现了它的设计哲学:只做一件事,并且做到极致。

它的数据模型极其简单:一个任务有ID、描述、状态、创建时间、完成时间、标签、截止日期这几个字段。没有优先级,没有子任务,没有依赖关系,没有附件。这种极简的数据模型意味着任何操作都很快,不需要复杂的索引和查询优化。

它的命令设计也遵循同样的原则:每个命令只做一件事,参数尽量少,默认行为符合大多数人的直觉。比如adhd list默认只显示未完成的任务,因为这是你最常需要的视图。如果你想看全部,加一个--all参数就行。

这种设计哲学有一个副作用:它强迫你简化自己的任务管理流程。你不能在任务里塞太多信息,不能建立复杂的层级结构,不能设置精细的优先级。你只能记录“要做什么”,然后去做。对于注意力容易分散的人来说,这种强制简化反而是一种解脱。

我后来把这种思路应用到了其他工具的使用上:能用一个字段表达的,不用两个;能用一个命令完成的,不拆成三步;能默认合理的,不让你选。减少选择,就是减少分心的机会。这可能是这个项目给我最大的启发。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询