Làm cách nào để kích hoạt và sử dụng mã gấp trong Vim?


48

Làm cách nào tôi có thể kích hoạt và thực hiện mã gấp trong Vim?

Tôi có phải thay đổi bất cứ điều gì trong ~/.vimrc?

Tôi gõ z+ az+ cz+ ovà không có gì xảy ra.

Đây là một bài viết về gấp: Mã gấp trong Vim .

Câu trả lời:


40

Không bạn không cần phải đặt lệnh từ trang bạn liên kết đến trong của bạn ~/.vimrc, bạn chỉ có thể gõ họ sau khi phát hành :tại vimđể có được những command prompt.

Tuy nhiên nếu bạn đặt các dòng:

set foldmethod=indent   
set foldnestmax=10
set nofoldenable
set foldlevel=2

như được chỉ ra trong liên kết bạn đưa ra, trong của bạn ~/.vimrc, bạn không phải nhập chúng mỗi khi bạn muốn sử dụng tính năng gấp trong một tệp. Các set nofoldenableđảm bảo rằng khi khai mạc, các file là "bình thường", tức là không gấp.


Tôi có một mã được viết bởi C, Vì vậy, trình duyệt trên một trong các chức năng của nó. Tôi nhấn <kbd> esc </ kbd> để đi đến lệnh vì vậy, sau :, tôi viết zc và không có gì xảy ra.
Mohammad Reza Rezwani

1
@alex các zc bạn không nên gõ sau :. Bạn gõ các setlệnh sau lời nhắc bạn nhận được khi gõ :. Các zcbạn gõ khi bạn có thể tự do di chuyển con trỏ, giống như bạn sẽ sử dụng ztđể có được những văn bản con trỏ vào phía trên cùng của màn hình hiện tại.
Anthon

39

Gấp theo mặc định

Phương pháp gấp mặc định của Vim manualcó nghĩa là các nếp gấp được tạo thủ công; nếu không, có được không gấp được đóng hoặc mở bằng za, zohoặc zcnhư bạn mô tả. Nhưng, bạn có thể tạo một nếp gấp zf{motion}ở chế độ Bình thường hoặc zfở chế độ Trực quan ; ví dụ: zfjtạo một nếp gấp cho dòng hiện tại và dòng tiếp theo trong chế độ Bình thường .

Gấp bởi indent

Câu trả lời được chấp nhận, bởi @Anthon, mô tả cách đặt phương thức gấp thành indent; tức là gấp được xác định bởi mức độ thụt.

Gấp bởi syntax

Theo cách thuận tiện hơn, các nếp gấp có thể được tạo tự động dựa trên cú pháp ngôn ngữ của bộ đệm hiện tại. Nếu bạn đang sử dụng ngôn ngữ lập trình, hãy gọi nó là L và bạn có định nghĩa gấp về L (ví dụ: bạn đã cài đặt một plugin Vim trong đó thông tin gấp của L được xác định, chẳng hạn như c.vim cho C / C ++ hoặc python -Mode cho Python), bạn chỉ cần đặt phương thức gập thành syntax:

set foldmethod=syntax

Đó là nó. Các lệnh hữu ích nhất để làm việc với các nếp gấp là:

  • zo mở một nếp gấp tại con trỏ.
  • zShift+ omở tất cả các nếp gấp tại con trỏ.
  • zc đóng một nếp gấp tại con trỏ
  • zmtăng foldlevelmột.
  • zShift+ mđóng tất cả các nếp gấp mở.
  • zrgiảm foldlevelmột.
  • zShift+ rgiảm foldlevelvề 0 - tất cả các nếp gấp sẽ được mở.

14

Bạn không cần phải sử dụng nó một cách có hệ thống: Tôi thường chọn thủ công các nếp gấp theo chuyển động hoặc phần. Ví dụ, gấp một đoạn là zfipvà gấp 20 dòng tiếp theo là zf20j. Sử dụng zađể chuyển đổi và zdloại bỏ.

Điều này đòi hỏi một chút công việc hơn nhưng cho phép gấp của bạn để phản ánh nhiệm vụ trong tầm tay.


4

Bạn có thể kích hoạt foldingtrong phiên hiện tại như câu trả lời của @ Anthon. Nhưng nếu bạn muốn làm cho nó vĩnh viễn, bạn phải đặt ít nhất dòng này vào .vimrccông việc gấp:

set foldmethod=indent

indent là loại gấp, bạn có thể xem thêm từ :help foldmethod

'foldmethod' 'fdm'      string (default: "manual")
                        local to window
                        {not in Vi}
                        {not available when compiled without the +folding
                        feature}
        The kind of folding used for the current window.  Possible values:
        fold-manual     manual      Folds are created manually.
        fold-indent     indent      Lines with equal indent form a fold.
        fold-expr       expr        'foldexpr' gives the fold level of a line.
        fold-marker     marker      Markers are used to specify folds.
        fold-syntax     syntax      Syntax highlighting items specify folds.
        fold-diff       diff        Fold text that is not changed.

Bây giờ, mỗi khi bạn mở một tệp với vim, bạn có thể thấy mã được gấp theo phương thức bạn đã đặt. Sau đó, bạn có thể sử dụng za, zc, zo.


Không cần sử dụng vimrc, tôi không bao giờ làm điều đó vì tôi chỉ thỉnh thoảng sử dụng gấp
Anthon

@Anthon: Ồ, tất nhiên rồi. Tôi sẽ thêm thông tin trong câu trả lời của tôi.
cuonglm
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.