如何复制Vim的代码折叠?


28

Emacs中的代码折叠

有时我想折叠一段文字。在Vim中,您可以轻松折叠而不会产生绒毛。无需添加任何特殊字符(如“标记”)或特定的正则表达式(如){{{。我想选择一个区域并将其折叠,而不会弄乱结构。

环顾四周时,似乎已经对Emacs中的代码折叠存在疑问。有人说“没有完美的解决方案”。例如,我在Vim中创建了一个简单的代码折叠剪辑:

Vim平折

在此处输入图片说明

+非常简单,选择一个区域并将其折叠。
+持久。当您杀死缓冲区/关闭Vim时。并重新打开文件,折叠仍然存在。
+您将获得一个高亮条,以轻松查看折叠的内容。

Vim还有许多其他折叠配置。我对Emacs感到满意,但这是我想念的一件事。我尝试过的其他替代方法,例如HideShow:

隐藏秀

在此处输入图片说明

邪恶的替代hide-show minor mode。我发现它不可用:

-我无法选择区域并折叠。它折叠在代码块上。

-没有抬高杆或其他东西,可以折叠起来。您可以轻松地错过它。

-不是持久的。如果您重新打开文件,则折叠不见了。

还有另一个包,将其折叠

折叠这个

在此处输入图片说明

-这是一个不错的选择。但是,它使缩进变得混乱,因为折痕下面的文本被放置在折痕旁边...(?)。

-可以仅在视觉上选择区域并将其折叠。但这破坏了这种意图,因此概述变得一团糟。不太方便。

-没有可折叠的高脚栏或其他东西。您可以轻松地错过它。

怎么了

我想复制一下Vim如何折叠。但是当我四处搜寻时,似乎在Emacs中很难做到这一点。因此,我想知道emacs或其架构中是否存在某些难以复制的内容?有什么限制?


2
我觉得这个问题太笼统了,因此我决定在此基础上结束投票。我建议原始海报选择一些提供某些所需功能的库,然后根据需要对其进行组合/修改。如果OP在实施/修改特定功能时遇到麻烦,请发布仅限于该问题的特定问题。OP 可能可以实现所需的视觉效果,但应做好准备,使其成为一个持续不断的项目,并随着时间的推移而不断发展。
法律列表

3
您能否解释一下您想要什么折叠功能?通常,您不能期望网站上的人知道Vim代码折叠的工作方式,无论如何,您应该告诉我们您具体想要哪些功能。您提供的关于所需内容的唯一信息是一个仅显示一个示例的动画,无论如何我都不知道其说明:它们不显示您使用的命令,为什么将光标移动到该位置或该位置等。此外,在典型的浏览器中,它们循环播放,无法确定何时开始重复。
吉尔(Gilles)'所以

3
保留应从此问题中删除。就目前而言,这是合理的。没有答案的问题不是解决它的充分理由。
Ista 2015年

2
AR-隐藏区域-ATPT,从'事-AT-点utils.el',AR-显示区域-ATPT github.com/andreas-roehler/thing-at-point-utils -请取消块,使可能是一个常规答案。
AndreasRöhler2015年

1
据我了解,这个问题基本上是:“ 有人:请为Emacs编写一个完整的库,它将提供Vim中所提供的确切代码折叠功能。 ”我从一些评论和赞成票中看到,已经足够希望看到这一点的人成为现实。但是,我看不到如何合理地解决这个问题-建议的新库将需要维护,其中包含问题和错误修复。我也不会介意有人用一个很酷的新功能为代码折叠编写整个库。
法律名单

Answers:


16

试试看vimish-fold

特征

  • 包括电池:激活次要模式,绑定几个命令,一切将正常工作;

  • 它适用于您选择的区域;

  • 它是持久的:关闭文件时,褶皱不会消失;

  • 除了具有持久性之外,它还可以很好地扩展,您还可以处理数百个折叠很多的文件,而不会产生不利影响。

  • 很明显,文本的哪些部分被折叠了;

  • 它不会破坏缩进或其他东西;

  • 它可以折叠成展开的褶皱(哦,我的);

  • 对于avy包装迷:您可以使用 avy最少的击键次数折叠文本!

用法

为某些/所有这些功能创建绑定:

  • vimish-fold -选定区域的基本折叠;

  • vimish-fold-unfold—您实际上并不需要绑定它,只需C-g在将点放在表示折叠文本的标题上时使用 ;

  • vimish-fold-unfold-all -尽管如此,这可能是有用的;

  • vimish-fold-refold —是的,您可以将其折回;

  • vimish-fold-avy-用于avy折叠文字!

您可以vimish-fold-mode选择要进行持久折叠的模式,也可以只是在任何地方激活它:

(vimish-fold-global-mode 1)

您有建议的按键绑定吗?在C ++模式下,您使用什么绑定?C模式?Python模式?Lisp模式?ELisp模式?JavaScript模式?
Reb.Cabin's

1
@ Reb.Cabin,这不是特定于模式的程序包,因此全局键绑定是最佳选择。我使用的键绑定不涉及和弦,大多数人会认为它们有点奇怪,目前我有:menu v fvimish-foldmenu v avimish-fold-avymenu v uvimish-fold-unfold-allmenu v vvimish-fold-refold。我的大多数按键绑定都是这样,这是我的config
Mark Karpov 2015年

这是否与邪恶的动作和文本对象融为一体?
PythonNut

1
嗯...我将开始公关工作。
PythonNut

1
我发现其中一个完全无法使用。对于那些已经熟悉vim中代码折叠的人来说,这也许是直观的……我不知道。另外,我不明白为什么在组织模式下折叠如此有效,但是Emacs尚不具备良好的代码折叠功能……
kjo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.