「总结」org-mode大纲视图的四种方案的对比以及最终解决策略

沉浸在org-mode之中阅读或者写作的时候,常常需要参阅文章的大纲结构,以获悉当前坐标在宏观视图中的位置,更好地把握阅读进度,整体理解,以及备忘提醒等。
Org-mode似乎对此提供了完美的解决方法,就是轮巡。

 C-n S(shift)-tab 展示不同深度的目录
 S-tab或者C-u Tab轮巡

长期以来,也始终坚持上述的解决方案,比如 C-2 S tab展示当前文章的2级深度的目录。

然而,该方法的弊端也显著,明显的干扰到当前的焦点和注意力。就类似于,在乡间开车迷路之际,司机一跃飞到万米高空,俯瞰地形地势。不幸的是,虽然有了大局图,司机可能再也找不到停在地面上的车辆了。上述轮巡的方法,展开整体树形结构的同时,也令用户失去当前的焦点,不得不用set-mark等方法再回去。但是,即使顺利回到原点,它在整个窗口中的位置也会变更,倘若原先在上半部分,再回来很可能到了下半部分。

如此跳来跳去,徒然增加大脑负担。因而,不得不尽量不去查看大纲视图,并且慢慢养成习惯。

打破既定习惯的冲动产生于重新使用typora之后,它的大纲视图,好像突然释放了大脑刻意记忆负担,用起来轻松惬意,激发熊熊的阅读和写作欲望。

如此看来,大纲视图必不可少,只是org-mode的轮巡方法并非良策。

发帖求助后, Kinney 给了imenu-list的好建议。

方案一 imenu-list

imenu-list 正能解决我的需求,几乎完美的解决方案,比之前尝试的org-sidebar更合适。

imenu-list 内使用Space和Enter键自由自在的阅读文章

  • <enter> : goto entry under cursor, or toggle case-folding.
  • <space> : display entry under cursor, but *Ilist* buffer remains current

还是有些不能满足需求的地方:

  1. 目录树默认expand,得逐个将其collapse。
  2. 大纲视图并不会自动跟随文章
  3. 大纲视图的buffer打开后,主buffer的文章空间挤压,须扩大emacs整个窗口,与此同时,却会挤压浏览器的空间。

但是这三点并不影响imenu-list的使用。

方案二

保持文章的完整,介绍较差的方案 org-sidebar

该方案把主buffer作为indirect-subtreebuffer,仅仅展示从大纲中点选的部分内容,读完之后,还要回到大纲中导航。

这不是我想要的,因此马上就删掉了。

方案三(启发方案)

Occur命令:
大纲视图能用occur命令展示,调用occur之后,输入^*+,就看到了展示在底部的大纲视图:

不足之处较多,比如将窗口占去一半。

agenda-capture-refile的跳转

或者使用capture-refile的跳转命令:

(C-u C-c C-w) 跳转到特定的heading

似乎好一点,因为是动态的。

底部的imenu-buffer

从imenu-buffer文档中看到,也能展示在底部,仅需要调整参数 imenu-list-position`。

imenu-list-position: should beleft,right,aboveorbelow` , to display the window at the left, right, top or bottom of the frame.

此时此刻,我终于有点开窍了,既然大纲结构展示在底部,大脑似乎并不方案,那么大纲结构就不要安装任何新的包,实现起来一点也不难。

方案四

一番折腾之后,大概明白了“潜意识”内对大纲结构的需求:

  1. 不干扰当前的焦点(这是首要需求)
  2. 灵活的调整展示深度,比如想要二级深度就给二级深度,想要三级就给三级片,不必再对默认的展示的大纲做调整
  3. 最好不要压缩主buffer的空间,避免调整emacs窗口的尺寸却影响到其他应用;
  4. 灵活性,呼之即来,挥之即去。

最终的解决方案是最高频的按键C-s (swiper-search)

一级目录深度: Swiper+ ^*

二级目录深度: Swiper + ^*{1,2}

三级目录深度: Swiper + ^*{1,3}

展示全部深度的目录:Swiper + ^*+

由此,Swiper的regex搜索查询模式,足够满足对outline的四点需求,并帮助思维拓展到更广阔之处。比如用rg查看整个项目的一级目录结构。

头条文章:https://www.toutiao.com/i6868811190919758348/

https://github.com/AbstProcDo/Master-Emacs-From-Scratch-with-Solid-Procedures/blob/master/Appendix-H-Orgmode-Outline-Solutions.md

14 个赞

谢谢分享~

这个大纲视图可能不会一直开着,需要浏览视图,toggle一下。imenu-list 的 相应键绑定,哪个比较合适?

一直开着,是不是选择imenu-list比较好。

没好好研究过,应该是imenu-list比较好吧,如果不一直开着,还有个counsel-imenu我比较常用,

2 个赞

counsel-imenu 好用哇,谢谢。 :grinning:

1 个赞

这四个方案都有不足之处:大纲分屏类型看似直观,由于每次操作都需要切换焦点,其实更适合键鼠用户;关键字过滤类型操作稍微有点复杂,节点被摊平之后不够直观。

楼主可以试一下“C-c C-j”调用org-goto命令。org-goto会打开一个100%的虚拟文件供你跳转,不会破坏层级结构,支持自动跟随当前光标所在节点位置;如果再按一个“/”,开启org-occur,进入关键字过滤模式,支持正则式。这个方法结合了四种方案的优点,在一定程度上可以替代思维导图软件的预览模式。

10 个赞

好棒的方案…

swiper 支持 拼音搜索了吗?

不支持… (拼音搜索的应用场景是??