Каков наилучший способ реализовать свертывание PHP-кода с помощью Vim, который сворачивает только функциональные блоки?

В настоящее время я использую Vim для редактирования файлов PHP и хотел бы реализовать свертывание кода только для функций. Я попытался установить foldmethod=expr и использовать регулярное выражение с foldexpr в моем файле .vimrc. Проблема в том, что я не совсем понимаю, как foldexpr использует регулярное выражение для применения свертки к исходному коду, и я не могу понять это правильно.

В основном я хочу, чтобы все функции PHP (внутри классов тоже) были свернуты, и все. Ближайшее, что у меня есть, это:

set foldexpr=getline(v:lnum-1)=~'function'?'>1':'='

но это неправильно, и я хочу посмотреть, смогу ли я быть немного умнее с фигурными скобками.

Любые идеи?


person Gary Willoughby    schedule 22.08.2011    source источник


Ответы (3)


Свертывание IIRC не работает с регулярными выражениями, потому что это замедляет работу vim. Вы можете получить то, что хотите, используя foldmethod=indent и задав foldnestmax для ограничения количества создаваемых вложенных складок.

person holygeek    schedule 22.08.2011

Я добился того, что мне было нужно, используя встроенный плагин PHP, который активировался, поместив его в мой файл .vimrc и не используя никаких других настроек свертывания.

let php_folding = 1        "Set PHP folding of classes and functions.
let php_htmlInStrings = 1  "Syntax highlight HTML code inside PHP strings.
let php_sql_query = 1      "Syntax highlight SQL code inside PHP strings.
let php_noShortTags = 1    "Disable PHP short tags.
person Gary Willoughby    schedule 20.09.2011

Ознакомьтесь с плагином phpfolding.

Это намного лучше, чем встроенный синтаксис php_folding, потому что он понимает docblocks phpdoc/doxygen, сворачивает код, чтобы вы все еще могли видеть имя функции (но скрывает документацию, которая ему предшествует).

Пример:

скриншот

Это немного странно, вам нужно запустить :EnablePHPFolds, чтобы обновить вещи, и я получаю странное сообщение, когда запускаю Vim (но это может быть потому, что я установил его с Vundle), но это красота!

(Также упоминается в https://stackoverflow.com/a/11859632/623519)

person artfulrobot    schedule 20.06.2014
comment
Я перешел к этому другому плагину для складывания github.com/swekaj/php-foldexpr.vim< /а> - person artfulrobot; 09.03.2015