Làm cách nào tôi có thể thiết lập Foldlevelstart trong vim để chỉ gấp không có gì ban đầu, vẫn cho phép zr hoạt động ngay lập tức?


8

Trong vim, tôi thường đặt foldmethodđể indentcho hầu hết các loại tập tin. Nói chung, tôi thích các tệp để mở với tất cả các lần mở. Tuy nhiên, thật hữu ích khi bắt đầu ngay lập tức bằng cách sử dụng zmđể bắt đầu đóng các nếp gấp trên toàn cầu, mỗi lần một cấp, cho phép tôi xem cấu trúc tổng thể của tệp mà không cần thông tin chi tiết.

Giải pháp chung duy nhất tôi tìm thấy là đặt foldlevelstartở một số rất cao, ví dụ 99, để đảm bảo rằng tất cả các tệp (lưu ý các tệp khác nhau sẽ có mức độ thụt tối đa khác nhau) bắt đầu hoàn toàn mở ra. Tuy nhiên, sau đó tôi phải sử dụng zmnhiều lần để giảm foldlevelxuống mức độ gấp tối đa của tệp, thường là dưới 99, rất cồng kềnh và không thực tế. Tôi có thể đặt foldlevelthủ công bằng cách sử dụng dòng lệnh vim, nhưng tôi vẫn cần biết thụt lề tối đa trong tệp.

Có cách nào thực tế để mở một tệp foldlevelđược đặt thành chính xác nhiều hơn mức thụt / gập tối đa hiện tại trong chính tệp không?

Ví dụ: đưa ra tệp sau:

a
  b
    c
      d1
      d2
    e
      f1
      f2

Phím nhấn đầu tiên của zmsẽ hiển thị điều này:

a
  b
    c
+--  2 lines: d1------
    e
+--  2 lines: f1------

(Tuy nhiên, lưu ý rằng nó sẽ hoạt động trong trường hợp chung trong đó độ thụt tối đa ban đầu của tệp có thể là bất kỳ giá trị nào).


1
Bạn đang bối rối zrvới zm; cái sau làm giảm nếp gấp.
Ingo Karkat 17/03/13

@IngoKarkat, bạn nói đúng. Xin lỗi vì sự nhầm lẫn - Tôi luôn thấy những combo chính đó phản trực giác. Tôi đã sửa câu hỏi của mình.
Andrew Ferrier

"Tôi luôn tìm thấy những combo chính phản trực giác." Nó có nghĩa là zm= gấp nhiều hơn (trừ Foldlevel) và zr= gấp ít hơn (thêm Foldlevel)
wvducky

Câu trả lời:


9

Điều này tìm thấy thư mục cao nhất trong tệp hiện tại:

:let &foldlevel = max(map(range(1, line('$')), 'foldlevel(v:val)'))

Để đặt điều này tự động, bạn có thể sử dụng :autocmd:

:autocmd BufWinEnter * let &foldlevel = max(map(range(1, line('$')), 'foldlevel(v:val)'))

1
Ingo, hoàn hảo, đó chính xác là những gì tôi đang tìm kiếm. Cảm ơn. Xấu hổ foldlevelstartkhông có một lựa chọn như thế này.
Andrew Ferrier

Điều này dường như không hoạt động trên Cygwin Vim. Của tôi foldlevellà 0 và foldlevelstartlà -1 khi tôi khởi chạy một tệp với các cài đặt đó.
CMCDragonkai

0

Thay vì sử dụng zr, sử dụng zR, sẽ mở tất cả các nếp gấp. Tương tự, zMsẽ đóng tất cả các nếp gấp.


Gary, cảm ơn. Đó là gần, nhưng không làm những gì tôi mô tả. Tôi muốn một lệnh làm giảm mức độ gấp chỉ một, nhưng từ mức độ gấp tối đa có liên quan đến tệp được đề cập. Để làm điều đó, tôi cần sử dụng zM để giảm độ gấp xuống 0, sau đó zr liên tục để mở thêm chi tiết. Tôi đang tìm kiếm một tổ hợp lệnh / phím.
Andrew Ferrier 17/03/13

2
Bạn có thể làm zR(đặt Foldlevel lên mức cao nhất) sau đó zmsẽ hoạt động. Đó chỉ là một bước nữa.
wvducky

0

Tùy chọn set nofoldenablecho phép bạn bắt đầu tắt tệp với tất cả các lần mở


Đó không phải là câu hỏi tôi đã hỏi. Tôi muốn kích hoạt gấp.
Andrew Ferrier
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.