3

很久以前有一个编辑器叫MultiEdit。它有一个我在所有强大的 VIM 中都找不到的功能。在 MultiEdit 中,我可以按一些热键,如果我只能在当前文件中看到所有函数的第一行(让它成为 C 源代码),它会显示类似目录(又名压缩模式,又名大纲)的内容。然后我可以将光标移动到我需要的功能上,按回车后,模式将切换到正常状态,我将处于我需要的功能中。对于喜欢将许多功能放在一个文件中的人来说非常有用。这个功能使用起来非常简单:一个配置选项用于输入正则表达式以选择标题行,一个热键用于模式切换。

VIM 有折叠功能。但这是不同的。折叠隐藏部分文件并显示折叠线指示器。为目录显示指定要在折叠中隐藏的内容要困难得多:您需要从标题行开始折叠并在下一个标题行之前结束。这比选择标题的简单正则表达式更复杂。

我非常想要这个功能,我什至编写了VIM 宏来模拟这种 MultiEdit 行为,尽管我不太了解 VIM。我写它的部分原因是学习一门新语言和编写宏比弄清楚 VIM 折叠模块的复杂性更容易。不幸的是,升级 VIM 后,这个宏现在不起作用(无限循环?)。我很久以前就写过它,我对VIM 所知道的一点点都被遗忘了,我现在无法修复它。(编辑:我已经修复了我的脚本。感谢@romainl 的链接)。

我的问题是如何在 VIM 中显示这个目录?

4

4 回答 4

8

Drew Neil 最近的这个vimcast解释了折叠的一般性,这个过程经历了创建你(可能)追求的那种折叠的过程。

根据您使用的语言和您的编码风格,一些简单的事情

set foldmethod=marker
set foldmarker={,}

并且zM可以让你走很长一段路:

CSS 折叠

如果您想自定义显示哪些信息,上面的第二个链接几乎肯定正是您所需要的。

于 2013-01-17T07:49:39.010 回答
2

看看 ctags 和 vim 插件tagbar

于 2013-01-17T15:24:24.957 回答
1

您还可以查看带有扩展Unite-Oulinevim 插件, 它提供的行为与您描述的非常接近。

于 2013-01-17T17:17:52.093 回答
1

这不是很好,但你试过setlocal foldmethod=syntax吗?它似乎在 Windows 上的 7.3 中做得不错。...虽然我刚刚意识到我们的编码标准在行尾而不是在新行上有一个块的左大括号,如果我将它改为在新行上,它的效果会大大降低。

于 2013-01-19T03:04:35.633 回答