我怎样才能编写一个与 foldmethod=indent 等效的 vim foldexpr?

我怎样才能编写一个与 foldmethod=indent 等效的 vim foldexpr?

后果这个答案在这里,我正在尝试为 vim 编写一个foldexpr相当于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

空行应保持前一行的折叠级别。试试这个:

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

相关内容