5

Я использую vim для всего кода, который я пишу. Моя самая большая проблема в том, что я не могу найти хороший плагин для свертывания кода Python. Я нашел два-три популярных из них, которые используют отступы, но они имеют тенденцию либо сгибаться слишком мало или слишком много. В идеале, это то, что я хотел бы, чтобы он сложил:

  1. Сложите все классы высшего уровня.
  2. Сложите все функции верхнего уровня.
  3. Сложите все методы класса

И больше ничего. Плагин, который я использую в настоящее время, неплох, но он имеет тенденцию сворачивать функции внутри методов. Он также запутывается в блоках кода в методе класса, которые имеют разные уровни отступов (например, цикл for, за которым следует больше кода, приведет к свертыванию кода после цикла for).

Кто-нибудь знает плагин, который удовлетворяет этим требованиям, или я должен просто выяснить, как написать свой собственный?

Вот что я пробовал в прошлом:

2 ответа2

2

Хотя у них нет плагина для вас, есть несколько полезных ответов на этот вопрос stackoverflow.

В частности, вы можете попробовать установить set foldnestmax=2 . Это сделает нежелательное сворачивание в функциях верхнего уровня, но в остальном удовлетворяет вашим требованиям. foldnestmax говорит, что не сгибайте ничего глубже, чем х (в отличие от уровня сгиба, который говорит, что сгибайте все глубже, чем х). Если вы хотите, чтобы свертывание было достаточно умным, чтобы находить функции, где бы они ни находились, вам нужно установить foldexpr .

Если вы используете foldexpr, вам лучше всего поиграть с базовым сворачиванием в vimscript, пока вы его не освоите, а затем поработать с кодом для одного из предоставленных вами плагинов. Обязательно set foldcolumn=1 (или больше), чтобы вы могли видеть сгибы, которые вы устанавливаете. Я думаю, что вы существенно увеличите свой фолд, только если вы видите class или def , но вам может понадобиться v:foldstart и v:foldlevel для определения, когда фолды заканчиваются.

Кроме того, попробуйте использовать zO для рекурсивного открытия сгиба (поэтому, если вы разворачиваете функцию верхнего уровня, все в ней разворачивается).

2

SimpylFold

Я считаю, что это лучший складной плагин для Python в VIM.

Это не что иное, как должно быть: оно правильно сворачивает определения классов и функций / методов и оставляет ваши циклы и условные блоки нетронутыми.

https://github.com/tmhedberg/SimpylFold

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .