一种朴素的几乎纯文本笔记和GTD方案 - A basic enough solution to organize GTD and dailyNotes

现在人不写日记了(正经人谁写日记,你写吗?)
但是好记性不如烂笔头, 工作生活免不了要写写笔记备忘录之类的。

Pre

现状 Situation:

很长一段时间我的笔记都处在一种自由生长的状态,电脑和手机都会用到,使用不同软件不同方法,各成体系,之间几乎不能同步。

  • 电脑端:一组txt文本记录Notes,处在git控制之下,使用vim编辑;todo list也都以PlainText形式记录在这些文本中,做完手动更改状态。
  • 手机端:使用iOS自带的备忘录,做todo list,几乎不会写笔记,有也是塞进todo list里面。
存在问题 Issue:
  • 一个早就有的痛点:不同平台无法同步,同步只能通过Apple的备忘录手动复制粘贴。
  • 有数据丢失风险,有时候网络不佳,刚写完的备忘录会在iCloud上同步失败,一条todo直接消失不见。
  • 手机上todo和电脑端的数据格式不同,这是也无法同步的原因之一,另一个是缺少同步手段。

Solution

分析 Analysis:

  • 不能同步的原因是不同平台间的内容储存和管理方式不同
  • 手机端用的是iOS自带的软件,数据被限制在app中,iCloud平台也不够通用,而且限制在Apple生态中
  • 电脑端用的是文本文件。
  • 数据稳定性受网络影响,并且手机端同步的状态只能通过肉眼查看内容来确认状态,没有一个显式的状态。

大纲 Requirments:

整理一下问题,现在可以大体罗列一下需求。

  • 需要最大程度解决兼容性问题,使用文本文件为中心 txt/md
    • 不能寻求一个All in one的app,以防锁死在其中,失去支持,不能导出数据,或者导出的数据很难处理与其他应用不兼容。
    • 不应该以任何App为中心来进行构建,因为你无法保证每个app之间能良好通信,共享数据。
    • 应该以一种最为基础的内容为中心。
    • 需要一种最基础简单的数据形式: 文本,最简单的即是TXT文本文件,相信它的兼容性是无可比拟的。笔记的本质是信息,而文字是一种高效率信息记录方式,小小的1M都蕴含着海量信息;图表为辅。
    • txt文件的兼容性可以保证最大程度上在各种设备、应用中储存,打开,阅读。
  • 需要一种最安全的储存/同步方式:git/syncthing(p2p)
    • 需要可以在本地编辑。
    • 需要可以云端储存
    • 最好可以进行版本控制
  • 对文件进行编辑,基于文本文件使用各种工具增强体验 各种工具和应用
    • 使用趁手的编辑器/应用
    • 最好是可以支持md
    • 最好是可以用Vim
    • 最好是有一种基于简单格式文本的但有方便互动操作的GTD方案

RelationShip Diagram

flowchart TB;

subgraph Mac[Mac local]
  F([Txt/Md/Org Files on Mac]) --- T;
  subgraph R[Review/Edit]
    V(Vim on Alacritty)
    E(Emacs: todo-list)
  end
  R --- T; 
  T(Alacritty)
  G((Git in Alacritty))
  T --- G;
end
G <-.->|Sync| Gc;
Gc <-.->|Sync| Gi;
Gc[(Git remote repository)]

subgraph iOS[iOS local]
  A([Txt/Md/Org Files in iOS Files]) --- Fi;
  Fi(iOS Files app) --- I;
  I(iSH)
  subgraph Ri[Review/Edit]
    Vi(iVim on iOS) 
    B(beOrg: todo-list)
    O(Obsidian on iOS)
  end
  Ri --- Fi;
  I --- Gi;
  Gi((Git in iSH))
end

工具 Tools

这些工具都是免费的或免费版也已经够用的,大多数是开源的

  • 电脑端:

    • 环境:Cli Alacritty
    • 同步:git
    • 编辑:Vim/Emacs(GTD/公式/制图/文学编程)
  • 移动端(iOS)

    • 同步:git(in iSH)
      iOS端因为封闭的文件系统要在app间共享文件和使用git比较麻烦,iOS上的git app最知名的有Working Copy,不过想要连接Working Copy以外其他App的文件夹和全部git功能都需要Pro订阅,弃之。
      然后发现了一个神器iSH。iSH内运行alpine linux,可以安装一个完整的git,和电脑端的别无二至。因为直接是linux环境,运行脚本,修改alias这些不在话下,用起来甚至比GUI的WorkingCopy更方便。
      对于连接iSH文件夹以外的位置,iSH可以通过mount命令做到。
      mount -t ios-unsafe . /root/mountFolder/
      注意这里最好写ios-unsafe,否则使用git的时候可能会经常进行index并且非常慢。
      并且注意因为alpine是单线程的,在iOS下使用可能会有问题,解决方法是git.gitconfig文件里加上
      1
      2
      [pack]
      threads = 1
  • 编辑/阅读:iVim/Obsidian/beOrg(用于todo-list)
    iVim:在键盘上方添加了一些常用符号,操作起来虽然没有真键盘方便但是比原键盘舒服多了。
    Obsidian:移动端屏幕比较小,直接在终端里操作并不方便,还是需要Obsidian这种能够渲染md文件的app来进行阅读比较舒适,其实也有别的md渲染app,为什么选Obsidian?并不是因为他有双向连接什么的,只是紫色黑曜石的icon比较好看~ 事实上电脑上我也并不会使用Obsidian,笔记/todo/代码 终端一把梭。
    beOrg:可以识别你的Emacs Org文件,todo-list,也可以使用agenda,因为没有键盘,在移动端还是这种GUI更方便,点选就可以改变state、deadline和新建todo。文本格式和Emacs兼容的还行,偶尔会有多少一两行空行啥的,问题不大。

Summary

  1. 以文本文件为内容核心

    使用md文件和org文件作为memo和todo list。特点是完全text-based,md和org的特点决定了他们即使不通过任何特定工具,任何平台上都可以以文本文件的形式查看,并且很直观,没有复杂的格式,但是又具有扩展性,可以做更复杂的展示、图表统计等。

  2. 通过git/syncthing等同步工具做全平台同步,

    而git的同步储存、版本管理能力无需多言,通过git自然而然地又满足了多备份异地备份,抗灾能力强,还可以通过自建本地私有git服务来实现完全信息私有。

  3. 外围可以使用工具来增强体验。

    使用beorg、obsidia之类的工具增强阅读和交互编辑体验在手机上简单的点选todi-list,obsidian可以建关系图。同时文件text-based的特性让你可以用你自己最喜欢的编辑器来编辑,比如vim,typora,emacs,vscode等。

缺点
要说简单肯定是不如notion/飞书这种一站式方便,也有一些工具上的使用成本。
优点
总的来说文本文件系统是最通用基础的管理方式,能保证极大的兼容性,与各种特定的软件之间解耦,但又能广泛地通过软件加强其能力。长远看可以把控其中细节,其中的细节可以拆分,便于拓展替换,与特定软件解耦。
试想当你所有笔记都在All-in在app中,某天你发现某个功能无法满足你的要求需要使用其他软件来配合,却发现该软件很难与其他app互动,因为他们数据格式不能互通。。。又或者某天他忽然挂了,网络卡住,或软件本身卡住,你却无法查看其中内容,或者你想转移数据却发现只有付费Pro版才能这么做,转出来了却发现内容根本不可读。。。又或者他数据根本不提供本地导出,你所有的数据都以一种你无法读取无法触及的方式存在一个遥远的服务器上,然后陷入深深的绝望。。。

这时候你才想起来,你本可以对自己的数据更有掌握权的。