【问题标题】:Table-of-contents with VIM folding带有 VIM 折叠的目录
【发布时间】:2012-12-31 16:56:06
【问题描述】:

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

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

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

我的问题是如何在 VIM 中显示类似目录的内容?

【问题讨论】:

  • 如果你想得到一个功能概览,你考虑过插件 taglist 或 tagbar 吗?

标签: vim folding


【解决方案1】:

Drew Neil 的 recent vimcast 解释了折叠的一般性,this one 经历了创建您(可能)追求的折叠类型的过程。

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

set foldmethod=marker
set foldmarker={,}

zM 可以让你走得很远:

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

【讨论】:

    【解决方案2】:

    看看 ctags 和 vim 插件tagbar

    【讨论】:

    • +1。很酷的插件。但是我不会使用它,因为我发现没有鼠标很难选择一个项目。
    • 如果你真的想的话,你可以使用带有标签栏的鼠标。
    【解决方案3】:

    您还可以查看带有扩展名 Unite-Ouline 的 vim 插件 unite 它给出的行为与您描述的非常接近。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • +1。不知道,很有意思。它对我不起作用,因为我有 custom C++ syntax file,我需要更新它以便它可以与折叠一起使用。
      猜你喜欢
      • 1970-01-01
      • 2011-07-01
      • 1970-01-01
      • 2012-06-13
      • 2013-01-16
      • 1970-01-01
      • 2011-04-09
      • 1970-01-01
      • 2019-11-17
      相关资源
      最近更新 更多