折叠关闭/打开时保存/恢复光标位置

折叠关闭/打开时保存/恢复光标位置

当我打开折叠时,无论是手动创建的折叠还是基于语法自动创建的折叠,我的光标仍位于折叠的顶行。相反,我希望它跳到折叠关闭之前折叠内的位置。

我假设我可以重新映射zcza在当前光标位置创建一个标记作为一种PreFoldClose钩子,然后我可以重新映射zo并将za光标移动到所述标记作为一种PostFoldOpen钩子。

但我希望甚至可能有一个选项可以简单地为我打开此功能。大家觉得怎么样?

奖励:如何在缓冲区加载/卸载过程中保留文件标记?命令中是否包含标记mkview

答案1

如果使用 关闭其中的折叠zc,然后(不移动)使用 再次打开它zo,则光标位置将保留在折叠内。这是因为当前行号仍保持在关闭折叠之前的状态,即使该行现在隐藏在折叠内。

但是,一旦移动,Vim 就需要将光标位置更新为可见的位置。对于垂直移动,这意味着将第一行折叠作为当前行;所有其他行都隐藏在折叠内,您必须打开折叠才能到达那里。

如果您想改变这一点,您建议的使用标记的方法听起来很合理。然而,这仅涵盖重新审视最后的折叠(或最多 26 折叠,受可用缓冲区本地标记数量的限制)。标记的好处是它们会自动适应行号的变化;即首屏上方的编辑不会使位置信息无效。如果您想存储任意数量的折叠(超过标记数量),则会遇到一个问题,即折叠只能由当前的行范围来识别,并且这些行在编辑过程中必然会发生变化。

TL;DR:继续尝试您的想法,但请注意,它仅限于最后一个折叠,并且不能概括为涵盖所有折叠。


额外答案:文件(大写)标记存储在维明信息文件,由控制:help viminfo-f:help viminfo-':mkview不考虑分数。

相关内容