思源在 v2.7.3 版本支持了转移引用,本文将带您了解转移引用的使用场景和发展脉络。
什么是转移引用?
- 转移引用是将一个块的所有引用关系转移到目标块上(也就是转移反链),它是思源的特色功能,也是思源社区和开发者对 Roam 式双链的进一步发展。
为什么要在思源里使用转移引用?
- 转移引用是对前期输入时认知负荷的分担,能让你更轻松地进行输入,不用担心精确命名某些内容,即使在输入时你引用到错误的块上,也能在后期通过这个功能将引用关系合并。
如何在思源中使用转移引用?
- 在目标块的块菜单里复制块 ID
- 点击想要转移引用的内容块块菜单,选中
转移引用
(这个内容块必须被引用才会有此选项) - 粘贴目标块的块 ID 后点击确定进行转移
转移引用在思源中的使用场景
防止反链丢失
-
思源的块分容器块和叶子块,在重构笔记时,如果将内容块在容器块和叶子块之间转换会出现块 ID 变动的情况,这样就造成了引用关系的丢失,而转移引用可以解决这个问题,在转换块类型前将引用关系转移出去即可避免丢失反链,就可以大胆的记。FLY 老哥的评论:
-
列表块段落块的困惑之一:对列表项块中的一段文本,不加区分段落块和列表块地引用,累积日久,会不会产生系统性风险? - fangly 的回帖
我靠自己规定的笔记规范来解决,我绝大多数文档内都是纯列表或者标题 + 列表,在引用时,只引用三种类型的块:文档块、标题块、列表项块。在笔记规范之下,这三种块是非常稳定的,引用这三种块,在重构笔记时,不会出现 id 变化的问题。剩下还有小部分文档是标题 + 段落块,这类文档一般是输出文章之类的,不适合使用大纲笔记那种方式编写,因此这种文档的块类型也非常稳定,不会出现问题。
- 此外关于你的担忧,还可以考虑通过“反链转移”功能解决,参考我在这个 issue 中的回帖:link,目前思源还没有这个功能,其他双链软件也还没有,不过有的软件通过“合并文档”功能对文档块间接实现了这个功能,但对于更细粒度的块我目前还没看到有软件实现了的。如果引用关系因为块类型的转换而破坏了,只需要通过“反链转移”功能就能很快修复。
- 因此,通过笔记规范,基本规避了风险,如果不喜欢这种笔记规范,偶尔会有块类型转换的情况,那也不用担心,放心写,有“反链转移”功能来兜底,平时记笔记时大胆记、放心记,有了“反链转移”功能,风险是可控的。
-
思源的块引用锚文本分为动态锚文本和静态锚文本,当你设定为动态锚文本时,转移引用后锚文本会跟着目标块内容改变
整理反链内容
-
当我们利用双链进行面对主题或者面对概念记录时,在后期会遇到整理反链的情况:
- 需要将反链拆分,转移到更细粒度的主题上(多出现于理解产生了精进,大主题生长出了细致的小主题)
- 需要将多个主题的反链合并,转移到同一个主题上(多出现于写了多个相同语义的主题词,需要将反链进行合并)
插件强化:细粒度的转移引用
思源本体的转移引用只能转移全部的引用关系, @Frostime 老铁的转移引用插件能自行选择需要的引用源去转移。
-
如何使用?
-
下载
-
打开设置-集市-插件,找到转移引用,点击下载即可
-
-
使用
- 点击文档块或者内容块的图标按钮,在插件图标中激活转移面板
- 在面板中,左侧列举了所有块的引用,右侧则是引用转移的目标块
- 点击表格中的复选框选择哪些引用需要被转移
- 填写目标块的 ID,或者选择下方的候选项(他们都是当前块所在文档的子文裆)
- 按下「转移到」按钮
-
-
PS:喜欢这个插件的老铁们可以去给作者点个赞,或者进行捐赠。
转移引用的改进历史
“页面合并”是前期输入的兜底
- 页面合并一直是个高频需求,在 双向链接时代的快速无压记录 里 @deerain 老师分析了双链笔记软件在使用上无压的技术原理,认为“页面合并”功能是为前期随意输入进行的兜底:只要有这个功能,就算前期输入时建立了多个类似的页面导致反链分流,也能在后期通过页面合并很方便地进行调整
从“页面合并”到“转移引用”
-
@fangly 老哥在这条评论里点破了“页面合并”的本质需求是“反链转移”,也就是“引用关系转移”。
-
写一点我关于这个功能的看法:
这个功能的核心并不是把两个文档的正文进行合并,因为这个完全可以手动完成,而且也不算麻烦,核心在于把一个文档块的反链转移到另一个文档块上,这个是在思源软件本体中目前做不到的,而且在思源的架构之下,完全不用局限在文档块,任何类型的块的反链都可以转移,因此我认为这个功能更准确的叫法应该是“反链转移”,可以在两个文档块之间转移,可以在文档块和非文档块之间转移,可以在两个非文档块之间转移,在思源里实现这个功能可以比 roam 更加灵活。
目前可以直接操作底层文件来实现这个功能,比如我想把块 A 的反链转移到块 B 上,只需全局搜索块 A 的 id,然后替换除了定义块 A 之外的搜索结果为块 B 的 id。但操作底层文件有风险,而且必须要关掉软件后操作,还要等待很长时间的从零开始的重建索引,因此需要思源软件本体给出这个功能。roam 里面实现合并文档时其实也是类似的做法,不过它们合并 page 时没有 id 的概念,直接全局替换[[page1]]为[[page2]]即可,和全局替换 id 是类似的。
我认为这个功能最终实现起来是这样的:首先用户给出两个块:块 A 与块 B,用户想要把块 A 的反链转移到块 B 上,然后软件自动将所有引用块 A 的地方改成引用块 B,最后,如果引用处是静态锚文本则锚文本不变,如果是动态锚文本则锚文本随之改变。
反链转移之后,如果识别到是文档块和文档块之间的转移,可以考虑再多一步,也就是把文档块 A 的正文移动到文档块 B 中,此时可以给出弹窗,例如“识别到是文档块之间的反链转移,是否要移动正文?”,如果用户点击确定,则转移,否则不转移。roam 里面必须转移其实是因为 roam 里面不能有同名文档,而思源里面可以存在同名文档,且思源里面还可以直接实现非同名文档之间的反链转移,没有必要一定要转移正文。
其实之前实现的标题块和文档块互转、列表项块转化为文档块,是“反链转移”功能的应用,可以视为“反链转移”对于特定场景下转移时的便捷交互形式。例如,我想把标题块“ABC”变成文档块《ABC》,我可以先创建文档块《ABC》,然后把标题块“ABC”下的内容移动到文档块《ABC》中,然后把标题块“ABC”的反链转移到文档块《ABC》中,之前实现的“标题块转文档块”是把上面这个步骤打包成一个拖拽动作(当然,本质上反链转移是改变引用块处的 id,而标题转文档改变的是定义块处的 id,但最终效果是一样的,毕竟 id 对用户来说是透明的)
-
-
他根据思源的架构提出了所有块都可以进行反链转移(PS:在思源里,所有块是平等的,但是文档块要比其他块更平等),认为标题块和文档块互转、列表项块转化为文档块在使用上是“反链转移”的一种便捷交互形式(打通正文与文件树的壁障 的最初目的也是为了解决组织内容时块 ID 失效的问题,提高内容块组织的灵活性)。
-
在 Roam 式双链里,引用关系是和上下文反链是灵魂,我们常说到引用关系实际上构成了“上下文语境”,它扩展了内容块的语义,一个内容块是什么、从哪里来、到哪里去、有什么用完全取决于内容块所在的语境和语义,而转移引用作为后期的一个兜底功能,能让您利用双链进行更好地思考。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于