检索一个目录下所有org files的标题(heading/entry)

consult-imenu或者consult-outline, 或者consult-imenu-multi是可以检索同一个org或者所有buffer中的标题. 但是, 如何检索一个目录下的所有org文件的标题? 最好还能preview. 下图是我在vim中达到的效果:

可以检索所有标题还可以预览. fzf搜索, ctags生成标题tags文件, 速度很快. 考虑到笔记也就几百个, 不一定要建立索引. 但我觉得还是建立标题索引比较快. 因为我不需要检索正文, 只需要检索标题.

helm-projectile-rg可以用ripgrep搜索, 但是有两个主要缺点:

  • 并不是搜索标题, 而是全文, 必须要先写标题的表达式
  • 更重要的问题, 正则表达式要达到fzf这种fuzzy search类似的效果很麻烦, 比如, 想要搜索有两个词出现在同一个标题, 需要写两个表达式(顺序可以换). 而且还要写.*这样的, 过于冗余. 使用不便.

可以用 org-element 解析出所有的标题,然后检索。

印象里consult-org是可以的,参考consult-org-agenda可以写出来在org-roam- directory文件夹下面所有org的heading。在排队做核酸手机码字找不到

可以用consult-org-heading写一个函数,它的第二个参数SCOPE可以是文件列表

具体参考consult-org-agenda就可以了

好的, 谢谢大家! elisp我还没怎么懂, 让我先学学这个, 大概弄出来可能要一周了…

(defun my/consult-org-dir (&optional match)
  (interactive)
  (consult-org-heading match (directory-files your-dir t "\\.org$")))
3 个赞

今晚才试用了一下, 可以直接用, 预览我还没弄出来, 但已经满足基本需求了. 非常感谢!

consult-org-heading应该是有预览的,可能你的consult配置的原因,具体可以看consult README的live-previews部分。

我看了看consult-preview-key, 默认值是all, 对于consult-org-heading, 设成了M-l, 但是按的时候完全没有反应, 不会preview. 没设置的时候按理说会自动preview, 但是也没有, 不知道与spacemacs有没有关系.