Nhiều nếp gấp trong vim


9

Tôi sử dụng tùy chọn gập của vim khá nhiều, và thường đặt Foldmethod thành cú pháp. Gần đây tôi phát hiện ra rằng có thể thêm các nếp gấp tùy chỉnh, nhờ đó tôi có thể đặt toàn bộ các khối vào /*{{{*//*}}}*/rất hữu ích để nhóm các phần lớn của một tệp nguồn lại với nhau. Tuy nhiên, để sử dụng tính năng đó, tôi cần đặt Foldmethod thành điểm đánh dấu và tôi thả lỏng cú pháp gấp.

Có thể có hai nếp gấp hoạt động cùng một lúc trong vim? set foldmethod=syntax,markerkhông hoạt động.

Câu trả lời:


4

Không, nói đúng ra là không thể có nhiều nếp gấp hoạt động trong Vim cùng một lúc.

Bạn có thể mô phỏng gấp dựa trên điểm đánh dấu nếu bạn sẵn sàng tìm hiểu cách viết quy tắc tô sáng cú pháp và hack tệp tô sáng cho ngôn ngữ bạn muốn thêm mô phỏng gấp đánh dấu. Làm như vậy có một số nhược điểm:

  1. Các lệnh để tạo / xóa một nếp gấp ("zf", "zd", v.v.) hoạt động với các phương pháp gấp đánh dấu và thủ công sẽ không hoạt động khi nếp gấp được đặt thành "cú pháp".

  2. Các điểm đánh dấu mô phỏng "buộc" mức độ gấp (ví dụ " {{{1" / " }}}1") trái ngược với việc tăng / giảm mức độ gấp một lần (ví dụ " {{{" / " }}}") là có vấn đề; hoặc bạn phải bỏ qua hoàn toàn các số cấp độ gấp hoặc có cơ hội rằng bạn sẽ can thiệp vào giáo dục và có thể phá vỡ các phần còn lại của quy tắc gấp dựa trên cú pháp.

Tôi đề nghị rằng khi bạn tìm thấy bạn cần gấp dựa trên điểm đánh dấu, bạn hoàn toàn sử dụng phương pháp đó. Nó có thể mất thêm thời gian và công sức, nhưng nếu bạn thực sự cần sự linh hoạt thì có thể đáng giá, đặc biệt là xem xét những khó khăn khi cố gắng kết hợp cả hai.


2

Tôi đã tìm kiếm điều tương tự. Vì tôi không muốn hack tệp cú pháp, thay vào đó tôi có một ánh xạ để chuyển đổi giữa các nếp gấp. Ngay bây giờ tôi chỉ chuyển đổi giữa cú pháp và điểm đánh dấu:

nmap <Leader>ff :call <SID>ToggleFold()<CR>
function! s:ToggleFold()
    if &foldmethod == 'marker'
        let &l:foldmethod = 'syntax'
    else
        let &l:foldmethod = 'marker'
    endif
    echo 'foldmethod is now ' . &l:foldmethod
endfunction
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.