Как я могу автоматически сложить все функции в файл с vim? - PullRequest
47 голосов
/ 30 декабря 2010

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

Ответы [ 6 ]

96 голосов
/ 30 декабря 2010

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

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

8 голосов
/ 30 декабря 2010

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

:%g/^{/normal! zf%

Может быть, так будет понятнее:

:%g /^{/ normal! zf%

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

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

7 голосов
/ 05 февраля 2012

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

Вам необходимо указать следующие строки в вашем .vimrc:

set foldmethod=syntax
set foldnestmax=1
5 голосов
/ 05 февраля 2012
set foldlevel=0

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

4 голосов
/ 13 сентября 2016

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

setlocal foldmethod=marker
setlocal foldmarker={,}

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

1 голос
/ 18 ноября 2014

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

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

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

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

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

...