Vim在特定文本块处折叠

时间:2016-08-30 21:31:02

标签: vim syntax indentation

我对Vim折叠很新。但它看起来很有趣。我有这样的评论块。 (分号是注释运算符)。

; START ANALYSIS
;
; Check for validity of data file
; ....
; Text 
; Text...etc
;
; END ANALYSIS

我该如何折叠? foldmethod最适合它的是什么?

我已尝试foldmethod indentexpr但未取得多大成功。 syntax foldmethod看起来令人生畏。

有人可以帮忙吗? (顺便说一下,文件类型是idlang)。

3 个答案:

答案 0 :(得分:2)

只要这是你想折叠的唯一一块,这很容易。

选项A

一种方法是重新定义倍数标记(默认为{{{ / }}})以使用块中的文本:

setlocal foldmethod=marker foldmarker=START\ ANALYSIS,END\ ANALYSIS

选项B

您还可以使用折叠表达式,然后进行字符串(或正则表达式)比较:

setlocal foldmethod=expr foldexpr=getline(v:lnum)==';\ START\ ANALYSIS'?'>1':getline(v:lnum)==';\ END\ ANALYSIS'?'<1':'='

条件看起来很难,也因为它是在线编写的。作为扩展函数,它看起来像:

function! FoldAnalysis( line )
    if a:line == '; START ANALYSIS'
        " A level 1 fold starts here; cp :help fold-expr
        return '>1'
    elseif a:line == '; END ANALYSIS'
        " A level 1 fold ends here
        return '<1'
    else
        " Use fold level from previous line
        return '='
    endif
endfunction
setlocal foldmethod=expr foldexpr=FoldAnalysis(getline(v:lnum))

选项C

如果想要在原始文件类型的折叠的顶部上进行折叠,则必须使用文件类型定义的内容(通常是基于语法的),并扩展它。

安装

要使其中的任何一个持久化,请将命令放在~/.vim/after/ftplugin/idlang.vim

答案 1 :(得分:1)

由于没有语法或缩进,您无法使用这些折叠方法四个评论。相反,你可以使用标记

; START ANALYSIS {{{
;
; Check for validity of data file
; ....
; Text 
; Text...etc
;
; END ANALYSIS }}}

{{{}}}将成为您的标记。然后你可以set foldmethod=marker

使用:help marker获取更多信息。

答案 2 :(得分:0)

只需使用鼠标选择或正常选择选择要折叠的线条,然后键入zf以折叠选定的线条,然后键入zo以展开相同的线条。