Свернуть не удается: vim не может найти сгиб

9

Я пытаюсь свернуть некоторый код PHP, и я включил урезанную версию некоторого кода, который я пытаюсь свернуть, в конце поста.

Я пробовал следующие команды vim, но работают только приведенные ниже команды ex. Не бывшие команды не работают и выдают белое на красном сообщение в строке состояния, говорящее: я не могу найти сгибы.

: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

Как я могу получить vim, чтобы найти сгибы (например, я хочу свернуть код между {и }, или между (и ).

Вот пример кода (просто чтобы показать, что он синтаксически правильный и, следовательно, команды vim должны работать):

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

}
Джон Сондерсон
источник

Ответы:

9

Vim не поставляется со встроенным сворачиванием синтаксиса PHP. Однако, если весь ваш код имеет правильные отступы (как в вашем примере), вы можете использовать другой метод свертки:

:set foldmethod=indent
Дверная ручка
источник
5

phpfolding.vim обеспечивает это. Преимущество этого в :set foldmethod=indentтом, что он «умнее», потому что смотрит на реальный синтаксис PHP, а не только на отступ. Из README:

  • Он запоминает настройки сгиба. Если вы добавите функции и снова выполните скрипт, ваши открытые сгибы не будут закрыты.
  • Его не смущают скобки в блоках комментариев или строковые литералы.
  • Сворачивание свойств класса с их комментариями PhpDoc.
  • Складывание всех свойств класса в одну складку.
  • Складывание оригинального стиля маркера складывается тоже.
  • Постфикс «**» после сгиба указывает на то, что PhpDoc находится внутри (настраивается).
  • «** # @ +» после добавления сгиба указывает, что PhpDocBlock находится внутри (настраивается).
  • Пустые строки после сгибания могут быть сконфигурированы для включения в сгиб.
  • Поддерживаются вложенные сгибы (функции внутри функций и т. Д.)
  • Складывание приватных, публичных, защищенных переменных класса + многострочный параметр.
  • Фолдирование класса теперь опция отключена по умолчанию.

Установите его, загрузив .vimскрипт и вставив его ~/.vim/ftplugin/php/(или используйте менеджер плагинов, если вы его используете). Он сворачивается автоматически, что вы можете отключить let g:DisableAutoPHPFolding = 1.

Мартин Турной
источник
Я попробую этот плагин. Я уверен, что дополнительные функции, которые он предоставляет, будут полезны, поскольку иногда при написании кода возникают синтаксические ошибки. Спасибо.
Джон Сондерсон