原来Vim的fold可以这么拉风!

巴黎欧莱雅

来自: 巴黎欧莱雅 2011-01-05 14:05:48

×
加入小组后即可参加投票
  • xuabc

    xuabc 2011-01-05 15:14:43

    这个很稀奇吗

  • [已注销]

    [已注销] 2011-01-05 15:15:58

    这个很稀奇吗

  • 流形

    流形 (放弃为得到更多) 2011-01-05 15:37:23

    好奇,这个是用怎么实现的

  • 0xFAN™

    0xFAN™ (我们都是游得最快的蝌蚪) 2011-01-05 17:08:46

    还行吧,一般拉风,一直都是用内建的fold..

  • xuabc

    xuabc 2011-01-05 23:27:40

    @流形 :h fdc

  • foOy

    foOy 2011-01-06 00:45:23

    还不错,基于括号和注释的折叠
    推荐下我很久以前搞的缩进折叠:
    ——————————————————
    function! HiFold(...)
    let tab2space=repeat(nr2char(32),&ts)
    if a:0==0
    let g:HiStr='\t\|'.tab2space
    else
    let g:HiStr=a:1
    endif
    let g:hiLen=strlen(substitute(g:HiStr, ".", "x", "g"))
    set fillchars="fold:"
    set foldmethod=expr
    set foldexpr=HiFoldExpr(v:lnum)
    set foldtext=HiFoldText()
    hi Folded term=bold cterm=bold gui=bold
    hi Folded guibg=NONE guifg=LightBlue
    endfunction
    function! HiFoldExpr(lnum)
    if getline(a:lnum)!~'\S'
    return "="
    endif
    let si=getline(prevnonblank(a:lnum))
    let sj=getline(nextnonblank(a:lnum+1))
    let i=HiGetHi(si)
    let j=HiGetHi(sj)
    if j==i
    return "="
    elseif j>i
    return ">" . i
    else
    return "<" . j
    endif
    endfunction
    function! HiGetHi(sline)
    let c=1
    while 1
    let shead='^\(' . g:HiStr . '\)\{' . string(c) . '}'
    if a:sline=~shead
    let c+=1
    continue
    endif
    break
    endwhile
    return (c)
    endfunction
    function! HiFoldText()
    let sLine=getline(v:foldstart)
    let tab2space=repeat(nr2char(32),&ts)
    let sLine=substitute(sLine,"\t",tab2space,"g")
    let a=(sLine=~"^" . nr2char(32))?".":"^"
    let sLine=substitute(sLine,a,"+","")
    let sLine=sLine . " ~" . string(v:foldend-v:foldstart)
    return sLine
    endfunction
    command! -nargs=? HiFold call HiFold(<args>)
    HiFold

  • [已注销]

    [已注销] 2011-01-13 17:40:23

    原来楼主就是来炫耀的吗……

  • 虽不中不远矣

    虽不中不远矣 (春夏之交有所思) 2011-01-22 11:57:30

    vim确实不易搞好fold,大家这些个很有参考价值。

  • JK

    JK 2013-07-19 12:43:04

    mark

  • 大海

    大海 2013-07-19 14:10:10

    还用鼠标点?效率底下

  • 依云

    依云 (sigwait([SIGTERM, SIGLOVE])) 2013-07-21 00:53:56

    原来这个转成 HTML 之后也还可以用的呀

  • 飞雪连天

    飞雪连天 (你是谁?) 2013-08-09 17:34:40

    还没我的拉风呢。。。。

  • beunprepared

    beunprepared 2013-08-09 18:44:10

    http://lxh.heliohost.org/wordpress/?p=183
    这个网址不厚道吧?

你的回应

回应请先 , 或 注册

Vim
17451 人聚集在这个小组
↑回顶部