想请教一下如何可以引用别处的heading/TODO之类的

我期望的两个最基本的功能就是「链接」和「同步修改」。

例如:我在引用处修改了TODO为DONE,那么被引用的地方也会同步修改为DONE,反之依然;我可以从引用处得到跳转到被引用处,也可以再被引用处得到哪里引用过。

我期望这个feature是因为之前用logseq,感觉这个其实挺方便的,但是似乎org-mode并不原生支持,所以来寻求论坛里大佬们的帮助。

用 org-transclusion 试试。

1 个赞

我一般直接在 org-agenda buffer 中直接修改,也会修改对应文件

原生解决办法应该是跳转到原文修改, 然后搜索出所有被引用的地方, 批量修改替换。 但如果文本数量比较大如几十M, 这个方法就不太好用了,只能用数据库建立索引的办法

我倒是现在把东西往org-roam迁移,借助org-roam的数据库感觉有操作空间,但可惜我不怎么会写elisp😂

这个看上去非常的棒啊,感觉蛮契合我的想法的,用用过来看。先感谢啦!

不同的东西内在逻辑不一样,可以先尝试用 org 的思维看看是否能满足需求,没必要照搬其他平台的。当时我也是从 rr 以及 logseq 转过来的。

其实我接触org-mode比logseq早hhh,但是org-mode不会配,就是emacs新人,后来想着可以用logseq来熟悉org的语法,就用了logseq,然后前一阵子又回到了org-mode(其实还有一个原因是随着熟悉emacs,感觉还得开logseq有点麻烦)。

当然你说的这个逻辑肯定是没毛病的,肯定是要合适自己的、满足自己需要的才行。org-mode的另外一个好处就是可以定制一些东西,来满足自己的需求(不过看上去目前我还没有自主开发功能的能力hhhhh未来路还长吧,慢慢来就好。

另外,rr是什么啊?

rr 是 roam research

但是我没有特别理解您的需求。个人理解可以拆为2个问题:

  1. 在引用处修改了TODO为DONE,那么被引用的地方也会同步修改为DONE,反之依然

    1. 这个在logseq中叫做块引用,动态更新引用的笔记标题。我没有看到有类似的包仅动态更新标题,手写elisp手动更新不难。而且让我有点困惑的是,在org-mode中复制id链接,默认的描述是不会附加TODO、DONE这些信息的。
    2. 如果动态更新引用的笔记标题和笔记内容,logseq叫做块嵌入,最近似这个feature的是坛友说的org-transclusion。
  2. 可以从引用处得到跳转到被引用处,也可以再被引用处得到哪里引用过。 这是典型的反向链接的需求。有多种方案:

    1. org-roam 是专门方案,基于sqlite,但是需要警惕笔记数量增加后的性能问题。个人现有2w+笔记的情况卡顿明显,因此我没有在用。
    2. 最简单的方案就是在笔记库搜索当前笔记id,org-sidebar中的org-sidebar-backlink就是这个思路。

我觉得如果原生功能可以满足需求是最好的,引入其他package(特别是有新的语法)的情况,跨平台的兼容就会变差(例如orgzly不支持org-transclusion的语法)

感谢分享!我还真没有注意过有「块引用」和「块嵌入」的区别,不过我感觉块嵌入是可以完成块引用的工作的?只是有点大材小用了。

其实我在用org-roam,可能因为笔记数量笔记比较少,性能问题还不明显。我最开始提到「链接」相关的feature的时候,是觉得给没给TODO都加id有点麻烦,但其实我后来意识到logseq的实现似乎也只是在被引用时生成id。所以其实这个feature我完全可以用org-roam来满足,是我开帖时欠考虑了。

另外想咨询一下,您在放弃org-roam之后使用什么方案了呢?是自己写一些功能来满足需求吗还是?(能写到2w+笔记感觉也确实积累了很久自己的知识库了hhh迁移起来感觉也有点麻烦

块嵌入从功能上来说包含块引用,但是我认为这不意味着使用场景也包含。我只用最基本的id链接,标题本身就是对笔记内容的抽象,而且有时为了适应段落描述,需要修改链接的描述,不能直接用标题。因此块嵌入和块引用都不用。

生成id有自动方法,参见Org-roam(v2) 以及 org-roam-ui 的使用姿势(已支持Emacs 29 内置的 sqlite) - #144,来自 yuchen-lea

个人觉得,org-roam的主要功能如下:

  1. org-mode之上包了一层,增强易用性:org-roam-tag-add、org-roam-refile、org-roam-capture这些功能org-mode原生就挺好的,少一层封装出问题的可能也少
  2. 插入和创建节点:我用helm-org和helm-org-rifle,添加一个自定义动作就可以快速插入id链接。比org-roam的搜索性能更快。求教【smart note】如何orgmode中快速插入headline链接 - #4,来自 yuchen-lea
  3. 反向链接:可能跟我的笔记习惯有关,我发现自己不太用到这个功能,偶尔有需求搜索当前id就行。反向链接图的作用也不是那么大,曾写文讨论过这个问题: 请不要神化双链笔记

OKOK还是很有帮助的!

关于自动生成id,我似乎不太习惯这么用,或者说不太习惯每一个TODO都作为一个org-roam node来看(当然不用org-roam的话,这个作用就不一样了)。当然也有一部分原因是我似乎还没形成一个使用org-mode的体系,很多东西可能还在调整。

但不管怎样,坛友您提供的这些观点和方式方法,对我来说非常有用(就是我还得花一段时间消化hhhh)。再次感谢!

既然佬友提到了 helm-org , 我想咨询一下您对 helmivy 的看法,比如功能上的差异或者优劣之类的。说实话我对这些不太了解,初入emacs坑的时候在网上抄了一些配置,就用了 ivy ,用起来挺方便就没再深入了解过了。但我觉得这些偏基础设施一点的东西其实是很有用的,但可惜一直没抽出时间来学习。

从架构来讲,vertico + orderless + consult 是最灵活的,配套的embark理念也很好。如果可以,我希望未来只使用vertico。现在普遍认为verico是可以替代ivy的。

功能取决你需要什么功能。基本功能都有实现。helm和ivy都更老资历,扩展功能更全面,我主要用helm一是因为更喜欢helm的窗口显示,内容呈现更多,二是我没有找到一个helm-org-rifle的ivy或vertico的实现,全局heading的搜索我也更习惯helm-org(主要是文件名、层级大纲的显示自定义),虽然ivy和vertico有类似实现。

再比如说bib的引用,我很需要批量插入笔记的功能,但是基于vertico的citar目前实现有问题:Issues · emacs-citar/citar · GitHub

如果从用户体验来说,差异主要在于候选项的呈现方式和动作列表。

看个人习惯吧,我觉得org-mode的一大优势就是知识和行动的一体化。比如我有一个「舒适区理论」的知识笔记,如果当前正在研究学习,就可以打上todo标识,加上schedule,方便筛选出需要整理的笔记。而不必专门去建一条「舒适区理论的学习」笔记,或者是去专业的GTD软件建一个任务在加上链接。我确实会区分行动与知识,但是二者的转化很灵活。

2 个赞