top0级文本笔记方案

市面上的笔记工具很多,笔记的记录类型也有很多,有手写的、文本的、语音的、扫描的、协助的等等。那今天的主要内容是讲的markdown文本类型的笔记方案,如果是寻求其他类型的,那到这里可以不用继续了。。。那么,我们继续往下!

文本类笔记按存储方式又可以分成两类,云端的、本地的。云端自然是数据存储在别人的服务器上,好处是大多数都可以做到多端同步,而弊端是大多数不支持你导出,或者导出后格式很难迁移到其他的平台,那一旦这个笔记的运营商跑路以后,如果有良心的还给你一段时间导出重新整理,没良心的那可就啥都没了。而本地的笔记,其实可以直接理解为txt文件,好处是自由度高,自己喜欢用什么编辑器就什么编辑器,同时一切都拿捏在自己的手中,不会被一波带走。弊端么,自然是不支持多个终端同步,不过这也不是什么麻烦事,再引入一个中心化的服务器进行存储就是了。

而我也用过语雀、有道云、印象笔记这些云笔记,虽然在强大的技术能力支撑下,这些产品都很优秀,但例如语雀也出现过因为服务器故障导致很长时间用户无法打开文档的生产事故,so,单从我个人来讲,第一选择永远都不会是云笔记了。

以下呢,就是我的文本笔记方案以及逐步的演化过程。如果想直接看最终方案,可以直接从obsidian-文档好帮手开始。

typora付费了,vscode当立?百家争鸣!

我最早所使用的是typora,界面看起来非常干净,不仅支持markdown实时渲染,所见及所得,同时还支持多个平台(不过好似没有移动端),更重要的是free。不过。。。好事不长久,在1.0版本以后,typora正式收费了,费用是89元永久,并且支持3个设备同时使用。而我,身为资深的零氪玩家,听到这个消息,那是立即打开支付宝!然后!收了能量以后马上关了。

那么,还有什么免费的、好用的编辑器吗?自然是有的,那就是微软打造的IDE-Vscode,vscode在全球的用户非常之多,其社群也非常活跃,与之相关的就是对应的插件也非常多。装上有些抽象的插件后,vscode就如同变形金刚般,开发仅仅是基础功能了,甚至于能聊天、能养宠物,更何况一个小小的markdown文档工具了。在装上Markdown All in One这个插件以后,可以自动帮你格式化,比如表格。但通过vscode来进行markdown文档编写也有些缺点,门槛略微有些高,同时不支持所见及所得,只能以预览的方式看到最终的文档效果,这也就导致在写文档的时候更加偏向于源码风格,没适应的人可能会觉得有些乱。不过换个思路,能加强自己对markdown语法的熟悉,也不错啦!

事实上,现在支持markdown的编辑器非常之多,比如后面即将提到的obsidian更是强力竞争者。

github-文档仓库的优选

好,那么本地编辑器如果有了,怎么解决多端同步问题呢?相信有很多人都用过git,知道它是一个用来管理代码的工具。也知道github,全球最大的同性交友网站(bushi)。事实上,它还能拿来做一切静态资源的仓库,无论是文档还是其他,甚至还能直接把自己的网站都托管在上面(gitpages,作为一个后端,我很羡慕前端同学能充分的利用这个资源)。而用它来管理自己的文档,自然是非常合适的,不仅能防止自己的文档误删丢失,还能记录自己所有的文档改动,在必要时进行回滚。

但是文档存储在github还有个问题,网络因素将会让简单的过程变得异常复杂,如果你碰到链接不上github同时又不知道如何解决的话,请大胆放弃,选择gitee!或者gitlab!或者请继续往下看!

obsidian-文档好帮手

初见

一次偶然的刷视频,我在评论区看到有人使用这个编辑软件,于是抱着试一试的想法下载使用。只能说amazing,界面和typora相似,简洁而又美观,同时也支持所见即所得。此外,它有一个相当丰富的社区插件市场,有文本增强、图片上传、远程同步、样式美化等等等等。最重要的是,它是免费的!免费!简直是我的梦中情编辑器好吗!

插件推荐

以下是我用过觉得不错的插件

插件名 功能
Style Settings 样式设置
Remotely Save 远程保存
Quiet Outline 大纲
Editing Toolbar 编辑栏
Excalidraw 流程图绘制
Advanced Tables 增强表格
Enhancing Mindmap 增强思维导图
Dataview 数据视图
Notes Dater 显示时间
Git git仓库同步

远程同步之¥¥¥

基于官方

也就是开通官方的pro,官方会提供服务跟帐号绑定,就可以随意在多平台使用了,当然,费用略微有些贵。

远程同步之git(限制比较多)

基于Git插件

食用方式

  1. 安装好插件
  2. 配置自动同步参数
  3. 同步路径
  4. 提交信息、格式
  5. 自动同步时间,比如5min一次
  6. 自动拉取新代码
  7. 等等等等
  8. 基本上配置好后就可以了

可能碰到的问题

  1. 不是git仓库:
  2. 说明这个文件目录下没有被git管理,也就是没有.git这个文件夹
  3. 建议先初始化仓库,在新设备上用时也先拉取仓库后,再使用obsidian
  4. 网络不通或同步失败
  5. 如果是github访问慢,可以配置ssh访问或者上科技或者换一个代码仓库,比如gitee
  6. 如果是git冲突,建议仔细合并冲突代码
  7. 插件问题,初始化一下配置,不知道的最好就默认配置了

优点

  1. 旧的改动也不会丢失,可以随时进行回滚查看
  2. 有免费的仓库可供使用,无需多余开销

缺点

  1. 移动端使用git存在较多奇怪问题
  2. 提交太频繁了,会影响电脑续航,而且git一堆的提交信息挺烦恼
  3. 多设备使用要及时进行提交,一旦忘记,容易产生冲突

远程同步之Remotely Save(推荐)

基于Remotely Save插件

使用方式

  1. 安装插件
  2. 选择合适的远程服务,这里推荐使用OneDrive(个人版)或者是S3
  3. OneDrive是微软的云盘,每人有5g的免费空间,基本上都够用了,同时认证方便,除了有时会比较慢。
  4. S3是对象存储,比较常见的有阿里oss,七牛云、腾讯云等,我使用的是香港区域的阿里云oss,之所以选择香港是因为海外区域的阿里云每月提供5G的免费存储和流量,基本也是够用的。上面给出了一个参考配置。
  5. 其他可以看下官方的使用文档,就不过多赘述了。
  6. 配置对应的自动存储时间,这些在配置项里都有描述了。

优点

  1. 存储快,多端同步方便,哪怕是移动端也可以快速同步,感受上就非常不错;
  2. 快,问就是快!
  3. 还是快!

缺点

  1. 存在丢失文件的风险,一旦误删除内容,且刚好被同步了,然后还关掉了,那基本是没有了;
  2. 不能进行版本管理,也就是写的内容,过一阵子发现不对,想看下以前写了什么,是行不通滴!

远程同步之终极方案(相当麻烦,一般有上面也够了)

基于Remotely Save插件 + Python + Git + 一台服务器

我主要想说的,并且正在使用的就是这个方案,但是对于大多数人来说,这种方案是相当麻烦的,我就只讲一下我的思路以及实现方式,就不把具体的配置等贴出来了,如果真的有需要的可以留言~

使用方式

客户端:

  1. 就是按照 远程同步之Remotely Save 的方式进行配置;
  2. 一般只需要配置好后,自动会把上面的内容同步下来,之后就是常规流程了。

在自己的服务器上做以下操作:

以下可以通过设置crontab的定时任务去执行python的脚本去实现,每天执行一次就好了,会的人应该基本知道怎么玩~

  1. 将oss上的文件的文件与本地的文件进行比较全量更新成oss的文件,这里我用了一个开源项目 https://github.com/yhlooo/oss_sync.git
  2. 将本地的文件进行git的提交,嗯嗯,git add 然后 git push

将这两个操作弄成一个shell脚本或者整合到oss同步脚本里,执行的时候只执行这个脚本就可以了,当然也扩展一下,加个通知机器人,使用可视化面板(比如青龙面板)方便配置,都是可以的。

我的操作是在这个开源的脚本main.py里加了点方法,在同步完成后进行了git的提交,放在下面可以参考一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
def run_command(command, cwd=None):
"""运行一个命令并记录输出"""
logger.info(f"Running command: {command}")
try:
result = subprocess.run(command, shell=True, cwd=cwd, text=True, capture_output=True)
logger.info(f"stdout: {result.stdout}")
if result.stderr:
logger.error(f"stderr: {result.stderr}")
result.check_returncode()
except subprocess.CalledProcessError as e:
logger.error(f"Command failed with error: {e}")
raise

def generate_commit_message():
"""生成带有时间戳的提交信息"""
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
return f"backup_{timestamp}"

def git_commit_push(repo_path):
"""将本地改动提交并推送到远程仓库"""
# 确保我们在正确的目录中
if not os.path.isdir(repo_path):
raise FileNotFoundError(f"Repository path '{repo_path}' does not exist.")

# 进入指定的 Git 仓库目录
os.chdir(repo_path)

# 检查是否有待提交的更改
status_result = subprocess.run("git status --porcelain", shell=True, cwd=repo_path, text=True, capture_output=True)
if not status_result.stdout.strip():
logger.info("No changes to commit.")
return

# 生成提交信息
commit_message = generate_commit_message()
logger.info(f"Generated commit message: {commit_message}")

# 运行 Git 命令
run_command("git add .")
run_command(f"git commit -m '{commit_message}'")
run_command("git push")

一点点小细节

  1. 同步oss的脚本,需要是比较文件hash值同步的
  2. 如果文件相同,则不要进行同步,浪费流量
  3. 第一次推送文件到空的oss上时,先手动的将git仓库的文件推到oss上,后续就不要再对这个仓库做提交了,只保留一个入口进行提交,不然冲突起来很麻烦

那今天就酱~