加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Vim在特定文本块处折叠

发布时间:2020-12-15 21:02:21 所属栏目:安全 来源:网络整理
导读:我对Vim折叠很新.但它看起来很有趣.我有这样的评论块. (分号是注释运算符). ; START ANALYSIS;; Check for validity of data file; ....; Text ; Text...etc;; END ANALYSIS 我怎么折这个?什么foldmethod最适合它? 我尝试了缩进和expr的折叠方法没有太大的
我对Vim折叠很新.但它看起来很有趣.我有这样的评论块. (分号是注释运算符).

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

我怎么折这个?什么foldmethod最适合它?

我尝试了缩进和expr的折叠方法没有太大的成功.语法foldmethod看起来令人生畏.

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

解决方法

只要这是您想要折叠的唯一块,这很容易.

选项A.

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

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中

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读