Đây 'foldmethod'
là một tùy chọn cửa sổ cục bộ; thiết lập nó từ bạn ~/.vimrc
không nhất thiết phải có hiệu quả đúng.
Vì cú pháp gấp được liên kết với kiểu html
tệp , các cài đặt này thuộc về ~/.vim/after/ftplugin/html.vim
:
setlocal foldmethod=syntax
Điều này phụ thuộc vào việc có filetype plugin on
trong bạn ~/.vimrc
, mà bạn có thể có. Bạn cũng có thể cấu hình các tùy chọn liên quan khác ở đó, ví dụ foldcolumn=4
.
Cũng lưu ý rằng cho đến nay (kể từ Vim 7.4.1830), tập lệnh cú pháp HTML mặc định chỉ tự gập một thẻ nhiều dòng chứ không phải văn bản giữa thẻ mở và thẻ đóng .
Vì vậy, điều này được gấp lại:
<div
class="foo"
style="width: 100"
>
Nhưng điều này không:
<div>
<b>stuff in between</b>
</div>
Để có được điều này, bạn cần mở rộng tập lệnh cú pháp, ví dụ như thông qua các mục sau, được đặt tốt nhất vào ~/.vim/after/syntax/html.vim
:
Phương án 1
Folding được thực hiện giữa tất cả trừ các phần tử html (những phần tử không có anh chị em đóng, như <br>
). Đóng góp bởi @zanona; cảm ơn!
syntax region htmlFold start="<\z(\<\(area\|base\|br\|col\|command\|embed\|hr\|img\|input\|keygen\|link\|meta\|para\|source\|track\|wbr\>\)\@![a-z-]\+\>\)\%(\_s*\_[^/]\?>\|\_s\_[^>]*\_[^>/]>\)" end="</\z1\_s*>" fold transparent keepend extend containedin=htmlHead,htmlH\d
Phương án 2
Folding được thực hiện giữa một số tên một cách rõ ràng về cấu trúc (ví dụ <head>
), đoạn cấp (ví dụ <p>
, <li>
) và phụ trợ (ví dụ <script>
) HTML tags.
syntax region htmlFold start="<\z(p\|h\d\|i\?frame\|table\|colgroup\|thead\|tfoot\|tbody\|t[dhr]\|pre\|[diou]l\|li\|span\|div\|head\|script\|style\|blockquote\|form\)\%(\_s*\_[^/]\?>\|\_s\_[^>]*\_[^>/]>\)" end="</\z1\_s*>" fold transparent keepend extend containedin=htmlHead,htmlH\d