Làm thế nào tôi có thể viết một vex Foldexpr tương đương với Foldmethod = indent?


2

Do kết quả của câu trả lời này ở đây , tôi đang cố gắng viết một foldexprvim tương đương với foldmethod=indent(như một điểm khởi đầu để sau đó nâng cao nó để nhận ra các điểm đánh dấu tùy chỉnh của tôi, xem câu hỏi để biết thêm chi tiết ).

Tôi đã thử điều này:

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

Tuy nhiên, điều này không thành công trên ví dụ HTML đơn giản này:

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

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

Nếu tôi đặt chìa khóa của mình trên <div id="c">dòng và nhấn zc, nếp gấp hoạt động như mong đợi và chỉ gập lại div đó. Nếu tôi mở lại, sau đó đặt chìa khóa của tôi lên <div id="b">dòng và nhấn zc, lần gập không thành công vì <div id="e">không được gấp lại.

Nếu tôi chuyển sang foldmethod=indent, điều này không xảy ra; lần thứ hai được thực hiện chính xác. Làm thế nào tôi có thể sửa chữa của tôi foldexprđể làm cho nó hoạt động như thế foldmethod=indentnào?


Bạn đã quản lý để có được nhiều nếp gấp (điểm đánh dấu và thụt lề) làm việc cùng nhau bằng cách sử dụng phương pháp này chưa?
xanh

@blueyed, tôi không sợ. Tôi tạm dừng dự án này. Sẽ được quan tâm để nghe nếu bạn có bất kỳ thành công.
Andrew Ferrier

Câu trả lời:


3

Các dòng trống nên giữ mức gấp của dòng trước. Thử đi:

:set foldmethod=expr
:set foldexpr=empty(getline(v:lnum))?'=':indent(v:lnum)/4
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.