Como posso escrever um vim foldexpr que é equivalente a foldmethod = indent?

2

Como resultado de esta resposta aqui , estou tentando escrever um foldexpr para o vim que é equivalente para foldmethod=indent (como ponto de partida para aprimorá-lo para reconhecer meus marcadores personalizados, veja a pergunta para mais detalhes ).

Eu tentei isso:

set foldmethod=foldexpr
set foldexpr=indent(v:lnum)

No entanto, isso falha neste exemplo HTML simples:

<div id="a">
    <div id="b">
        <div id="c">
            <div id="d">
            </div>
        </div>

        <div id="e">
        </div>
    </div>
</div>

Se eu colocar minha chave na linha <div id="c"> e atingir zc , a dobra funcionará como esperado e dobrará apenas essa div. Se eu reabrir, coloque minha chave na linha <div id="b"> e acesse zc , a dobra falhará se <div id="e"> não estiver dobrada.

Se eu mudar para foldmethod=indent , isso não acontece; a segunda dobra é executada corretamente. Como posso corrigir meu foldexpr para que ele se comporte como foldmethod=indent ?

    
por Andrew Ferrier 03.03.2013 / 13:54

1 resposta

3

Linhas vazias devem manter o nível de dobra da linha anterior. Tente isto:

:set foldmethod=expr
:set foldexpr=empty(getline(v:lnum))?'=':indent(v:lnum)/4
    
por 03.03.2013 / 16:33

Tags