Gagal melipat: vim tidak dapat menemukan lipatan apa pun


9

Saya mencoba melipat beberapa kode PHP, dan saya telah memasukkan versi cut-down beberapa kode yang saya coba lipat pada akhir posting.

Saya sudah mencoba perintah vim berikut, tetapi hanya perintah ex di bawah ini yang berfungsi. Perintah non-ex tidak berfungsi dan menghasilkan pesan putih-merah di baris status yang mengatakan: Saya tidak dapat menemukan lipatan.

:help folding
:help fold-commands
:help foldmethod

:set foldmethod=syntax

zi - toggle folding

zj - move to top of next fold
zk - move to bottom of previous fold

za - toggle current fold open and closed
zo - open current fold
zc - close current fold

zA - toggle all current folds at the current cursor position
zO - open all current folds at the current cursor position
zC - close all current folds at the current cursor position

Bagaimana saya bisa mendapatkan vim untuk menemukan lipatan (misalnya saya ingin melipat kode antara {dan }, atau antara (dan ).

Berikut ini beberapa contoh kode (hanya untuk menunjukkan bahwa kode itu benar secara sintaksis dan karenanya perintah vim harus berfungsi):

function getTree() {

  return array(
    "node1" => array(
      "node11" => array(
        "node111" => "leaf111",
        "node112" => "leaf112",
        "node113" => "leaf113",
      ),
          "node12" => array(
        "node121" => "leaf121",
        "node122" => "leaf122",
        "node123" => "leaf123",
      ),
      "node13" => array(
        "node131" => "leaf131",
        "node132" => "leaf132",
        "node133" => "leaf133",
      ),
    ),
    "node2" => array(
      "node21" => array(
        "node211" => "leaf211",
        "node212" => "leaf212",
        "node213" => "leaf213",
      ),
          "node22" => array(
        "node221" => "leaf221",
        "node222" => "leaf222",
        "node223" => "leaf223",
      ),
      "node23" => array(
        "node231" => "leaf231",
        "node232" => "leaf232",
        "node233" => "leaf233",
      ),
    ),
    "node3" => array(
      "node31" => array(
        "node311" => "leaf311",
        "node312" => "leaf312",
        "node313" => "leaf313",
      ),
          "node32" => array(
        "node321" => "leaf321",
        "node322" => "leaf322",
        "node323" => "leaf323",
      ),
      "node33" => array(
        "node331" => "leaf331",
        "node332" => "leaf332",
        "node333" => "leaf333",
      ),
    ),
  );

}

Jawaban:


9

Vim tidak dilengkapi dengan sintaks lipat PHP bawaan. Namun, jika semua kode Anda diindentasi dengan benar (seperti contoh Anda), Anda dapat menggunakan metode lipatan yang berbeda:

:set foldmethod=indent

5

phpfolding.vim menyediakan ini. Keuntungan dari ini :set foldmethod=indentadalah bahwa ini "lebih pintar" karena melihat sintaks PHP yang sebenarnya, dan bukan hanya lekukan. Dari README:

  • Itu mengingat pengaturan lipat. Jika Anda menambahkan fungsi dan menjalankan skrip lagi, lipatan Anda yang terbuka tidak akan ditutup.
  • Tidak akan bingung dengan tanda kurung di blok komentar atau string literal.
  • Lipat properti kelas dengan komentar PhpDoc mereka.
  • Lipat semua properti kelas menjadi satu lipatan.
  • Lipat juga lipatan gaya marker asli.
  • Postfixing "**" yang terlipat menunjukkan bahwa PhpDoc ada di dalam (dapat dikonfigurasi).
  • "** # @ +" postfixing flip menunjukkan bahwa PhpDocBlock ada di dalam (dapat dikonfigurasi).
  • Baris kosong postfixing lipatan dapat dikonfigurasi untuk dimasukkan dalam lipatan.
  • Lipatan bersarang didukung (fungsi di dalam fungsi, dll.)
  • Melipat variabel kelas privat, publik, dilindungi + param multi-line.
  • Memodekan kelas sekarang menjadi opsi yang dinonaktifkan secara default.

Instal dengan mengunduh .vimskrip, dan masukkan ~/.vim/ftplugin/php/(atau gunakan manajer plugin Anda, jika Anda menggunakannya). Ini akan dilipat secara otomatis, yang dapat Anda nonaktifkan let g:DisableAutoPHPFolding = 1.


Saya akan mencoba plugin ini. Saya yakin fitur tambahan yang disediakannya akan berguna karena terkadang ketika menulis kode ada kesalahan sintaksis. Terima kasih.
John Sonderson
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.