11

有没有办法让 VIM 继续对用作折叠标题的行应用格式?

例如,我有以下代码:

int foo(int a, int b) {
    int c;
....
}

折叠后,我看到:

+-- 4 lines: int foo(int a, int b) {----------------------------

但是,整行根据“折叠”类突出显示。有什么办法可以禁用它,所以我继续看到语法突出显示?

[举个简单的例子,这不是那么重要,但我也广泛使用折叠来查看大型数据文件,格式对我来说更重要]


4

2 回答 2

7

但是,整行根据“折叠”类突出显示。有什么办法可以禁用它,所以我继续看到语法突出显示?”

不,折叠的标题文本不是文件的一部分,不能直接编辑,只是计算并覆盖在屏幕上。“折叠”突出显示应用于整条线,并且所有折叠都应用相同的突出显示。

对于我使用 vim 作为大纲(在 VimOutliner 项目中)我破解了 vim 源以允许根据折叠级别进行不同的折叠突出显示,因此应用了多个折叠标题突出显示(例如 FoldLevel1、FoldLevel2 等) . 我认为在折叠标题行使用已经存在的文本突出显示可能会被进一步破解,但考虑到折叠的工作方式,我怀疑这可能比听起来更难。

抱歉,让我感到震惊的是,对缩进的 foldmethod 的建议可能正是您正在寻找的东西,它确实保留了未缩进行中的语法,同时仍然让它们作为折叠部分的一种标题。

于 2009-11-28T20:20:13.643 回答
5

我认为您正在寻找的是将折叠方法更改为缩进而不是手动,这是默认设置。在命令模式下输入。

:set foldmethod=indent

现在,如果你进入你的 foo 函数并输入 zm (将折叠级别增加一),它将如下所示:

int foo(int a, int b) {
+--  2 lines: int c;------------------------------------------------------------
}

foo 行仍然会突出显示语法。当然,要展开,请键入 zr。为方便起见,我在 .vimrc 中放了以下几行来快速折叠或展开所有内容:

" Folding and unfolding
map ,f :set foldmethod=indent<cr>zM<cr>
map ,F :set foldmethod=manual<cr>zR<cr>

这里也有一个很好的教程,当然阅读有关 foldmethod 的 vim 帮助可能会引导您找到比缩进更喜欢的其他方法,但是您的示例代码看起来可能需要缩进。

于 2009-11-28T17:20:06.597 回答