沉浸在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
还是有些不能满足需求的地方:
- 目录树默认expand,得逐个将其collapse。
- 大纲视图并不会自动跟随文章
- 大纲视图的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 be
left,
right,
aboveor
below` , to display the window at the left, right, top or bottom of the frame.
此时此刻,我终于有点开窍了,既然大纲结构展示在底部,大脑似乎并不方案,那么大纲结构就不要安装任何新的包,实现起来一点也不难。
方案四
一番折腾之后,大概明白了“潜意识”内对大纲结构的需求:
- 不干扰当前的焦点(这是首要需求)
- 灵活的调整展示深度,比如想要二级深度就给二级深度,想要三级就给三级片,不必再对默认的展示的大纲做调整
- 最好不要压缩主buffer的空间,避免调整emacs窗口的尺寸却影响到其他应用;
- 灵活性,呼之即来,挥之即去。
最终的解决方案是最高频的按键C-s (swiper-search)
一级目录深度: Swiper+ ^*
二级目录深度: Swiper + ^*{1,2}
三级目录深度: Swiper + ^*{1,3}
展示全部深度的目录:Swiper + ^*+
由此,Swiper的regex搜索查询模式,足够满足对outline的四点需求,并帮助思维拓展到更广阔之处。比如用rg查看整个项目的一级目录结构。