2010-12-30 12 views
30

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

+4

FYI vim дистрибутивы обычно поставляются со встроенной помощью. Если вы наберете ': help fold', вы увидите все связанные с флешкой вещи. –

+1

Вам нужно будет добавить какой язык вам интересен (не для всех языков есть {} для начала!); сворачивание в Vim - это отдельная тема. – Rook

ответ

70

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

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

+0

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

+0

@Yongwei: Хорошо, я думаю, что понял. Это то, что вы хотели? –

+1

zR и zm не работают после того, как я установил foldmethod = синтаксис –

8

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

:%g/^{/normal! zf% 

Может быть, это более ясно, таким образом:

:%g /^{/ normal! zf% 

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

См :help :g и :help :normal

+0

Я использую это - спасибо однако как вы можете избежать его от складывания через функции? кажется, что это не только функции – serup

4

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

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

set foldmethod=syntax 
set foldnestmax=1 
3
set foldlevel=0 

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

+1

'zM' делают то же самое. – MOHRE

1

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

Поясните по кусочкам:

:%g - поиск globaly в целом файле

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

normal! f{zf% - выполнить вперед до '{' f{ и сделать фолд с переездом '%' zf% на tha т строка

+1

не смог заставить вашу команду работать - возможно, показать пример функций – serup

1

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

setlocal foldmethod=marker 
setlocal foldmarker={,} 

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

+0

Мне это очень понравилось! Но я должен разделить строки, которые закрывают одну фигуру и открывает другую (например, "} else {") –

 Смежные вопросы

  • Нет связанных вопросов^_^