转移引用功能使用详解

本贴最后更新于 540 天前,其中的信息可能已经东海扬尘

思源在 v2.7.3 版本支持了转移引用,本文将带您了解转移引用的使用场景和发展脉络。

什么是转移引用?

  • 转移引用是将一个块的所有引用关系转移到目标块上(也就是转移反链),它是思源的特色功能,也是思源社区和开发者对 Roam 式双链的进一步发展。

为什么要在思源里使用转移引用?

  • 转移引用是对前期输入时认知负荷的分担,能让你更轻松地进行输入,不用担心精确命名某些内容,即使在输入时你引用到错误的块上,也能在后期通过这个功能将引用关系合并。

如何在思源中使用转移引用?

  1. 在目标块的块菜单里复制块 ID
  2. 点击想要转移引用的内容块块菜单,选中 转移引用(这个内容块必须被引用才会有此选项)
  3. 粘贴目标块的块 ID 后点击确定进行转移

转移引用 1

转移引用在思源中的使用场景

防止反链丢失

  • 思源的块分容器块和叶子块,在重构笔记时,如果将内容块在容器块和叶子块之间转换会出现块 ID 变动的情况,这样就造成了引用关系的丢失,而转移引用可以解决这个问题,在转换块类型前将引用关系转移出去即可避免丢失反链,就可以大胆的记。FLY 老哥的评论:

  • 列表块段落块的困惑之一:对列表项块中的一段文本,不加区分段落块和列表块地引用,累积日久,会不会产生系统性风险? - fangly 的回帖

    我靠自己规定的笔记规范来解决,我绝大多数文档内都是纯列表或者标题 + 列表,在引用时,只引用三种类型的块:文档块、标题块、列表项块。在笔记规范之下,这三种块是非常稳定的,引用这三种块,在重构笔记时,不会出现 id 变化的问题。剩下还有小部分文档是标题 + 段落块,这类文档一般是输出文章之类的,不适合使用大纲笔记那种方式编写,因此这种文档的块类型也非常稳定,不会出现问题。

    • 此外关于你的担忧,还可以考虑通过“反链转移”功能解决,参考我在这个 issue 中的回帖:link,目前思源还没有这个功能,其他双链软件也还没有,不过有的软件通过“合并文档”功能对文档块间接实现了这个功能,但对于更细粒度的块我目前还没看到有软件实现了的。如果引用关系因为块类型的转换而破坏了,只需要通过“反链转移”功能就能很快修复。
    • 因此,通过笔记规范,基本规避了风险,如果不喜欢这种笔记规范,偶尔会有块类型转换的情况,那也不用担心,放心写,有“反链转移”功能来兜底,平时记笔记时大胆记、放心记,有了“反链转移”功能,风险是可控的。
  • 思源的块引用锚文本分为动态锚文本和静态锚文本,当你设定为动态锚文本时,转移引用后锚文本会跟着目标块内容改变

整理反链内容

  • 当我们利用双链进行面对主题或者面对概念记录时,在后期会遇到整理反链的情况:

    • 需要将反链拆分,转移到更细粒度的主题上(多出现于理解产生了精进,大主题生长出了细致的小主题)
    • 需要将多个主题的反链合并,转移到同一个主题上(多出现于写了多个相同语义的主题词,需要将反链进行合并)

插件强化:细粒度的转移引用

思源本体的转移引用只能转移全部的引用关系, @Frostime 老铁的转移引用插件能自行选择需要的引用源去转移。

  • 如何使用?

    • 下载

      • 打开设置-集市-插件,找到转移引用,点击下载即可

        • image
    • 使用

      1. 点击文档块或者内容块的图标按钮,在插件图标中激活转移面板
      2. 在面板中,左侧列举了所有块的引用,右侧则是引用转移的目标块
      3. 点击表格中的复选框选择哪些引用需要被转移
      4. 填写目标块的 ID,或者选择下方的候选项(他们都是当前块所在文档的子文裆)
      5. 按下「转移到」按钮
      6. preview
  • 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 式双链里,引用关系是和上下文反链是灵魂,我们常说到引用关系实际上构成了“上下文语境”,它扩展了内容块的语义,一个内容块是什么、从哪里来、到哪里去、有什么用完全取决于内容块所在的语境和语义,而转移引用作为后期的一个兜底功能,能让您利用双链进行更好地思考。

  • 思源笔记

    思源笔记是一款隐私优先的个人知识管理系统,支持完全离线使用,同时也支持端到端加密同步。

    融合块、大纲和双向链接,重构你的思维。

    22994 引用 • 92479 回帖
3 操作
dammy 在 2023-06-30 12:08:04 更新了该帖
dammy 在 2023-06-30 12:06:24 更新了该帖
dammy 在 2023-06-30 01:07:21 更新了该帖

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • PiChou 6 9 赞同

    给太长不看的新人举个例子:

    1. 你很久以前新建了 [[学习方法]] 的主题用来记录学习方法相关的内容;

    2. 某天你又遇到感兴趣的学习方法,但因为时间太久远,你把 [[学习方法]] 给忘了,于是新建了 [[学习技巧]] 的主题存放;

    3. 今天,你终于打算复习一下所有的有关学习方法的内容,但你发现它们分散在两个主题当中。

    4. 这时你可以使用「转移引用」,将其中一个的反链合并到另一个当中。

    发现有什么好处了吗?

    它为你早期的决策失误买单。于是乎当你想记录一个新东西的时候,不必绞尽脑汁去想「之前建立的那个主题叫什么名字来着?」,而是随着当前的心意去命名——反正后期可以通过「转移引用」合并反链。

  • 其他回帖
  • Bard

    fangly 老哥已经很久没有出现了啊

  • suiji

    “防止反链丢失”部分,按我的理解,转移引用是 A 处引 B,而后在 B 处把关系转移到 C,它要在 B 处操作。反链丢失,丢的正是 B。所以它应该不能防止反链丢失。至少,在“补救”的意义上不能。

    1 回复
  • dammy 2 赞同

    是我的问题,没表达清楚,转换块类型后没法修复反链,只有在转换为叶子块前将反链转移才能避免丢失,也就是没法补救,只能预防,感谢反馈 ❤️ 。