Bagaimana cara mengaktifkan dan menggunakan kode lipat di Vim?

49

Bagaimana saya bisa mengaktifkan dan melakukan pelipatan kode di Vim?

Apakah saya harus mengubah sesuatu ~/.vimrc?

Saya mengetik z+ adan z+ cdan z+ odan tidak ada yang terjadi.

Berikut ini artikel tentang melipat: Melipat kode di Vim .

Mohammad Reza Rezwani
sumber

Jawaban:

40

Tidak Anda tidak harus meletakkan perintah dari halaman Anda terhubung ke dalam Anda ~/.vimrc, Anda hanya dapat mengetik mereka setelah mengeluarkan :di vimuntuk mendapatkan command prompt.

Namun jika Anda meletakkan garis:

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

seperti yang ditunjukkan pada tautan yang Anda berikan, di ~/.vimrc, Anda tidak perlu mengetikkannya setiap kali Anda ingin menggunakan pelipatan dalam file. The set nofoldenablememastikan bahwa ketika membuka, file yang "normal", yaitu tidak dilipat.

Anthon
sumber
Saya memiliki kode yang ditulis oleh C, Jadi courser masuk pada salah satu fungsinya. Saya tekan <kbd> esc </kbd> untuk pergi ke perintah jadi, setelah:, saya menulis zc dan tidak ada yang terjadi.
Mohammad Reza Rezwani
1
@ alex the zc Anda tidak harus mengetik setelah :. Anda mengetik setperintah setelah prompt yang Anda dapatkan saat mengetik :. The zcAnda mengetik ketika Anda dapat dengan bebas memindahkan kursor, sama seperti Anda akan menggunakan ztuntuk mendapatkan teks kursor berada pada bagian atas layar saat ini.
Anthon
40

Lipat secara default

Metode lipat default Vim adalah manualarti bahwa lipatan dibuat secara manual; jika tidak, tidak ada lipat akan ditutup atau dibuka menggunakan za, zoatau zcseperti yang Anda gambarkan. Tetapi, Anda dapat membuat lipatan dengan zf{motion}dalam mode Normal atau zfdalam mode Visual ; misalnya zfjmembuat lipatan untuk garis saat ini dan yang berikutnya berikut dalam mode Normal .

Lipat oleh indent

Jawaban yang diterima, oleh @Anthon, menjelaskan cara mengatur metode pelipatan ke indent; yaitu lipat didefinisikan oleh tingkat lekukan.

Lipat oleh syntax

Dengan cara yang lebih mudah, lipatan dapat dibuat secara otomatis berdasarkan sintaks bahasa buffer saat ini. Jika Anda menggunakan bahasa pemrograman, sebut saja L , dan Anda memiliki definisi lipat L (misalnya Anda telah menginstal plugin Vim di mana informasi lipat L didefinisikan; seperti c.vim untuk C / C ++, atau python -mode untuk Python), Anda hanya perlu mengatur metode lipat ke syntax:

set foldmethod=syntax

Itu dia. Perintah yang paling berguna untuk bekerja dengan lipatan adalah:

  • zo membuka lipatan di kursor.
  • zShift+ omembuka semua lipatan di kursor.
  • zc menutup lipatan di kursor.
  • zmmeningkatkan satu foldlevelper satu.
  • zShift+ mmenutup semua lipatan terbuka.
  • zrmengurangi satu foldlevelper satu.
  • zShift+ rmengurangi foldlevelke nol - semua lipatan akan terbuka.
kartunis
sumber
14

Anda tidak harus menggunakannya secara sistematis: Saya biasanya memilih lipatan secara manual berdasarkan gerakan atau bagian. Misalnya, melipat paragraf zfipdan melipat 20 baris berikutnya zf20j. Gunakan zauntuk beralih dan zdmenghapus.

Ini membutuhkan sedikit lebih banyak pekerjaan tetapi memungkinkan lipat Anda untuk mencerminkan tugas yang ada.

Marmaduke
sumber
4

Anda dapat mengaktifkan foldingdi sesi saat ini seperti jawaban @ Anthon. Tetapi jika Anda ingin membuatnya permanen, Anda harus mengatur setidaknya garis ini .vimrcuntuk pekerjaan lipat:

set foldmethod=indent

indent adalah jenis lipat, Anda dapat melihat lebih banyak dari :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.

Sekarang, setiap kali Anda membuka file vim, Anda dapat melihat kode dilipat dengan metode yang Anda atur. Maka Anda dapat menggunakan za, zc, zo.

cuonglm
sumber
Tidak perlu menggunakan vimrc, saya tidak pernah melakukan itu karena saya hanya menggunakan lipatan
Anthon
@Anthon: Oh, tentu saja. Saya akan menambahkan lebih banyak informasi dalam jawaban saya.
cuonglm