组织笔记

以前的思路:目录作为树状归类,毕竟基于文件的笔记总是逃脱不了目录树;标签作为辅助,实现重叠标记。两个维度交叉,基本没有疏漏。

同时我认为:知识是立体网状结构 ,很复杂,很难用平面的图形清晰地表达出来。

然后用了 Docsify,这个东西很简单,把它放在笔记目录下就可以了。但有一个细节让人很不习惯,就是不能自己生成目录,所以每添加一篇笔记都要自己在侧边栏加入对应的链接,这非常原始。我一度打算自己写个脚本来生成目录的,但又不喜欢每次发布前都运行一下脚本,当然也可能是懒,反正就搁置了。

用着用着,觉得这样也挺好。因为笔记存放的位置和笔记展示的目录可以不完全相关。这有点纸质笔记自写索引那味儿了,好像也不错。想想也是,为什么我不可以自己给笔记做一份索引呢?只是因为这是电子笔记,就认为它应该自动生成么。

所以可以搞一个索引页,然后做一个查询来统计未别被列入索引页的笔记(待整理)。

然后就去做了,发现很舒服,用 Callouts 进行分组,这样可以把常用笔记都分组列出来(如果有必要,一篇笔记也可以处在多个组中,没人说不允许重复嘛)。Obsidian 本身有链接预览,还可以用用 Hover Edit 进行增强,直接鼠标悬浮,然后小窗编辑。整个流程就顺畅了。

附:未索引笔记的查询代码(dataviewjs)

// 输出标题 
dv.header(2, '未索引笔记')
// 遍历笔记,并列出
dv.list(dv.pages().filter(p=>{
  // 排除文件夹(ZJI、Resource)
  if(/^(ZJI|Resource)\//i.test(p.file.path)) return false
  // 没有进入链接的文件应该被列出
  if(!p.file?.inlinks?.length) return true
  // 进入链接都不来自于索引文件夹(Index)
  let unIndex = true
  p.file.inlinks.forEach(l=>{
    if(/^Index\//i.test(l.path)) unIndex = false
  })
  return unIndex
}).file.link)

下面使用的 Callouts 格式,这样在我这里格式比较统一(dataviewjs):

//  查询,拼接代码
const code = `> [!danger] 未索引笔记
> `
+ dv.pages().filter(p=>{
  // 排除文件夹(ZJI、Resource)
  if(/^(ZJI|Resource)\//i.test(p.file.path)) return false
  // 没有进入链接的文件应该被列出
  if(!p.file?.inlinks?.length) return true
  // 进入链接都不来自于索引文件夹(Index)
  let unIndex = true
  p.file.inlinks.forEach(l=>{
    if(/^Index\//i.test(l.path)) unIndex = false
  })
  return unIndex
}).map(p=>p.file.link).join(' | ')
// 插入元素输出
dv.el('div', code)

纯平笔记

Append at 2023-11-01 19:58:15

上面的思想更进一步,就是我称之为“纯平笔记(FlatNote)”的结构了。即笔记之间相互平等,所以完全并列,于是便没有了文件夹,也没有了顺序。这符合知识点之间本来的关系。然后通过相互链接和索引来关联和组织。

应该说 Notion 等数据库笔记本身就是这种结构。而 Obsidian 这种基于文件系统的笔记很容易被文件夹和排序给绕进去。但是当文件数量增大,基于文件夹和文件排序的查找变得非常低效。

然后基于这个思路,打造了现在的笔记站生成器(FlatNote)。

©2022~2023 稻米鼠. Last build at 2023/12/5 00:00:21