Подтвердить что ты не робот

Как я могу автоматически складывать все функции в файле с помощью vim?

Сначала я использую set foldmethod = marker и перемещаю курсор в {из одной функции, используя функцию zf% для сброса текущей функции. Но в этом файле есть много функций. Как я могу сбросить все функции в этом файле? И я не хочу сбрасывать {} в функции.

4b9b3361

Ответ 1

Если вы :set foldmethod=syntax, складки будут указаны из определений синтаксиса. Если вы предпочитаете, вы можете :set foldmethod=indent, чтобы отступы определяли складки.

Вы можете закрыть все сгибы с помощью zM. Если у вас есть вложенные складки, и вы хотите сбросить уровень за уровнем, используйте zM. Для открытия складок используйте zR (все) и zR (уровень за уровнем).

Ответ 2

Если каждая функция имеет свою первую скобу в первом столбце, вы можете сделать:

:%g/^{/normal! zf%

Возможно, это более понятно:

:%g /^{/ normal! zf%

команда g выбирает строки в соответствии со следующим шаблоном и выполняет команду ex (здесь normal! для воспроизведения нажатий клавиш нормального режима).

См. :help :g и :help :normal

Ответ 3

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

Вам нужно ввести следующие строки в .vimrc:

set foldmethod=syntax
set foldnestmax=1

Ответ 4

set foldlevel=0

будет сбрасывать все с самого начала, что нужно сложить. В зависимости от языка и вашей функции сгиба содержимое складки будет меняться.

Ответ 5

Попробуйте :%g/\(function\_.\{-}\)\@<={/ normal! f{zf%

Объясните пополам:

:%g - поиск в глобальном масштабе всего файла

/\(function\_.\{-}\)\@<={/ - паттерн для поиска первой '{' после любой 'функции' и поместите курсор на начало строки с помощью этого '{'

normal! f{zf% - перейдите к '{' f{ и сделайте сгиб с перемещением '%' zf% в этой строке

Ответ 6

Я пытался сделать то же самое и просто делал:

setlocal foldmethod=marker
setlocal foldmarker={,}

Он использует метод разметки маркера и изменяет маркер на одну фигурную фигуру (по умолчанию маркер {{{).