【问题标题】:syntax highlighting in a VIM fold headerVIM 折叠标题中的语法高亮显示
【发布时间】:2010-12-21 05:56:54
【问题描述】:

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

例如,我有以下代码:

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

折叠后,我看到:

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

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

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


【问题讨论】:

    标签: vim syntax-highlighting folding vim-syntax-highlighting


    【解决方案1】:

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

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

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

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

    【讨论】:

      【解决方案2】:

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

      :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>
      

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

      【讨论】:

      • 感谢您的回复;不过,也许我不应该举这个例子。您的 cmets 非常适合 C 代码,但我也经常使用 vim.org/scripts/script.php?script_id=158 折叠文本文件。这似乎不适合任何解决方案
      • 我不认为如果你折叠纯文本文件,语法突出显示会很重要(我很想看到一个例子),但如果它确实适用同样的想法。如果您在要突出显示语法的行下方开始折叠,那么您仍然应该看到要正确突出显示的行。
      • @mmrobins,您介意查看this question about highlighting Python syntax on a fold line 并提供一些关于它是否可能以及我可能需要更改哪些内容才能完成这项工作的意见吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-05-07
      • 2010-09-08
      • 2016-08-16
      • 2015-04-24
      • 1970-01-01
      • 2012-12-04
      • 2011-06-03
      相关资源
      最近更新 更多