2009-11-28 112 views
9

是否有任何方法让VIM继续将格式应用于用作折叠标题的行?在VIM折叠标题中突出显示语法

例如,我有以下代码:

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

当折叠时,我看到:

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

然而,整个行被突出显示为每 “折叠” 类。有没有什么办法可以禁用它,所以我仍然看到语法突出显示?

[一个简单的例子,这是不是那么重要,但我也用在观看大型数据文件广泛折叠,并有格式是更重要的是我]


回答

7

“但是,整个行被突出显示为”折叠“类。是否有任何方法来禁用它,所以我仍然看到语法突出显示?

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

对于我用vim作为大纲(在VimOutliner项目中),我砍掉了vim的源代码以允许根据折叠级别进行不同的折叠高亮显示,所以应用了多个折叠标题高亮显示(例如FoldLevel1,FoldLevel2等)。我认为它可能会进一步黑客使用已经存在的折叠头部文本的突出显示,但考虑到折叠方式的作用,我怀疑这可能比听起来更难。

对不起,刚才让我觉得indent的foldmethod的建议可能正是你要找的东西,它确实保留了非缩进行的语法,同时仍然具有折叠部分的标题功能。

5

我想你”重新寻找正在改变foldmethod缩进而不是手动,这是默认的。在命令模式下输入。

:set foldmethod=indent 

现在,如果你去你的富功能和类型ZM(增加了1倍水平)内,它看起来就像这样:

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的帮助可能导致你其他方法你喜欢比缩进更好,但你的示例代码看起来很可能需要缩进。

+0

感谢您的回复;但也许我不应该举这个例子。您的意见对C代码很有用,但我也经常使用http://www.vim.org/scripts/script.php?script_id=158来折叠文本文件。这似乎并不适用于任何解决方案 – Mikeage 2009-11-29 03:39:48

+2

我不认为如果您折叠纯文本文件,语法高亮将会很重要(我会很好奇看到一个示例),但如果它执行相同的排序的想法适用。如果您在要添加语法的行下面开始折叠,那么您仍然应该看到想要正确突出显示的行。 – mmrobins 2009-11-29 06:52:09

+0

@mmrobins,你会介意看[这个关于在折叠线上突出显示Python语法的问题](http://stackoverflow.com/questions/8655799/syntax-highlight-python-in-a-vim-fold-line)并提供一些关于是否可能以及为了使这项工作可能需要改变的信息。 – 2011-12-31 03:08:32