Gấp không thành công: vim không thể tìm thấy bất kỳ nếp gấp


9

Tôi đang cố gắng gấp một số mã PHP và tôi đã bao gồm một phiên bản rút gọn của một số mã tôi đang cố gắng gấp ở cuối bài.

Tôi đã thử các lệnh vim sau, nhưng chỉ các lệnh ex bên dưới hoạt động. Các lệnh không phải là ex không hoạt động và tạo ra một thông báo trắng trên dòng trạng thái: Tôi không thể tìm thấy bất kỳ nếp gấp nào.

: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

Làm cách nào tôi có thể lấy vim để tìm các nếp gấp (ví dụ: tôi muốn gấp mã giữa {}, hoặc giữa ().

Đây là một số mã mẫu (chỉ để cho thấy rằng nó đúng về mặt cú pháp và do đó các lệnh vim sẽ hoạt động):

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",
      ),
    ),
  );

}

Câu trả lời:


9

Vim không đi kèm với cú pháp PHP được tích hợp sẵn. Tuy nhiên, nếu tất cả các mã của bạn được thụt lề đúng cách (như ví dụ của bạn), bạn có thể sử dụng một phương thức gấp khác:

:set foldmethod=indent

5

phpfolding.vim cung cấp điều này. Ưu điểm của điều này :set foldmethod=indentlà nó "thông minh hơn" vì nó nhìn vào cú pháp PHP thực tế chứ không chỉ là thụt lề. Từ README:

  • Nó nhớ các thiết lập gấp. Nếu bạn thêm chức năng và thực hiện lại tập lệnh, các nếp gấp đã mở của bạn sẽ không bị đóng.
  • Nó sẽ không bị nhầm lẫn bởi dấu ngoặc trong khối nhận xét hoặc chuỗi ký tự.
  • Việc gấp các thuộc tính của lớp với các bình luận PhpDoc của họ.
  • Việc gấp tất cả các thuộc tính lớp thành một lần.
  • Gấp các kiểu đánh dấu ban đầu gấp quá.
  • Một hậu tố "**" trong nếp gấp cho biết PhpDoc ở bên trong (có thể định cấu hình).
  • Một hậu tố "** # @ +" cho thấy nếp gấp cho biết PhpDocBlock nằm bên trong (có thể định cấu hình).
  • Các dòng trống có hậu tố các nếp gấp có thể được cấu hình để được bao gồm trong các nếp gấp.
  • Các nếp gấp lồng nhau được hỗ trợ (các chức năng bên trong các chức năng, v.v.)
  • Gấp các biến riêng tư, công khai, được bảo vệ + param nhiều dòng.
  • Theo mặc định, lớp mã hóa là một tùy chọn bị tắt theo mặc định.

Cài đặt nó bằng cách tải xuống .vimtập lệnh và đưa nó vào ~/.vim/ftplugin/php/(hoặc sử dụng trình quản lý plugin của bạn, nếu bạn sử dụng tập lệnh). Nó sẽ tự động gập lại, mà bạn có thể vô hiệu hóa với let g:DisableAutoPHPFolding = 1.


Tôi sẽ thử plugin này. Tôi chắc rằng các tính năng bổ sung mà nó cung cấp sẽ hữu ích vì đôi khi khi viết mã có lỗi cú pháp. Cảm ơn.
John Sonderson 6/2/2015
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.