2

В результате этого ответа я пытаюсь написать foldexpr для vim, который эквивалентен foldmethod=indent (в качестве отправной точки для дальнейшего улучшения распознавания моих пользовательских маркеров, см. Вопрос для более подробной информации).

Я пробовал это:

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

Однако, это терпит неудачу на этом простом примере HTML:

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

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

Если я помещу свой ключ в строку <div id="c"> и нажму zc , сгиб будет работать как положено и сгибает только этот div. Если я снова открою, затем поместу свой ключ в строку <div id="b"> и нажму zc , сгиб завершится неудачей, так как <div id="e"> не сложен.

Если я переключаюсь на foldmethod=indent , этого не происходит; второй сгиб выполняется правильно. Как я могу исправить свой foldexpr чтобы он вел себя как foldmethod=indent?

1 ответ1

3

Пустые строки должны сохранять уровень сгиба предыдущей строки. Попробуй это:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .