当我打开折叠时,无论是手动创建的折叠还是基于语法自动创建的折叠,我的光标仍位于折叠的顶行。相反,我希望它跳到折叠关闭之前折叠内的位置。
我假设我可以重新映射zc
并za
在当前光标位置创建一个标记作为一种PreFoldClose
钩子,然后我可以重新映射zo
并将za
光标移动到所述标记作为一种PostFoldOpen
钩子。
但我希望甚至可能有一个选项可以简单地为我打开此功能。大家觉得怎么样?
奖励:如何在缓冲区加载/卸载过程中保留文件标记?命令中是否包含标记mkview
?
答案1
如果使用 关闭其中的折叠zc
,然后(不移动)使用 再次打开它zo
,则光标位置将保留在折叠内。这是因为当前行号仍保持在关闭折叠之前的状态,即使该行现在隐藏在折叠内。
但是,一旦移动,Vim 就需要将光标位置更新为可见的位置。对于垂直移动,这意味着将第一行折叠作为当前行;所有其他行都隐藏在折叠内,您必须打开折叠才能到达那里。
如果您想改变这一点,您建议的使用标记的方法听起来很合理。然而,这仅涵盖重新审视最后的折叠(或最多 26 折叠,受可用缓冲区本地标记数量的限制)。标记的好处是它们会自动适应行号的变化;即首屏上方的编辑不会使位置信息无效。如果您想存储任意数量的折叠(超过标记数量),则会遇到一个问题,即折叠只能由当前的行范围来识别,并且这些行在编辑过程中必然会发生变化。
TL;DR:继续尝试您的想法,但请注意,它仅限于最后一个折叠,并且不能概括为涵盖所有折叠。
额外答案:文件(大写)标记存储在维明信息文件,由控制:help viminfo-f
和:help viminfo-'
。:mkview
不考虑分数。