Как включить и использовать свертывание кода в Vim?

48

Как я могу включить и сделать свертывание кода в Vim?

Должен ли я что-то изменить в ~/.vimrc?

Я набираю z+ aи z+ cи z+, oи ничего не происходит.

Вот статья о фолдинге: Код сворачивания в Vim .

Мохаммед Реза Резвани
источник

Ответы:

40

Нет , вы не должны поместить команду со страницы вы связаны в вашем ~/.vimrc, вы можете просто ввести их после выдачи :в vimполучить приглашение командной строки.

Однако, если вы поставите строки:

set foldmethod=indent   
set foldnestmax=10
set nofoldenable
set foldlevel=2

как указано в приведенной вами ссылке ~/.vimrc, вам не нужно вводить их каждый раз, когда вы хотите использовать свертывание в файле. set nofoldenableУбеждается , что при открытии, файлы являются «нормальными», т.е. не сложен.

Энтон
источник
У меня есть код, который написан на C, так что в одной из его функций. Я нажимаю <kbd> esc </ kbd>, чтобы перейти к команде, поэтому после: я пишу zc, и ничего не происходит.
Мохаммед Реза Резвани
1
@alex ZC вы не должны печатать после :. Вы вводите setкоманды после запроса, который вы получаете при наборе :. zcВы набираете , когда вы можете свободно перемещать курсор, так же , как вы бы использовать , ztчтобы получить текст курсор находится на верхней части текущего экрана.
Энтон
39

Сложить по умолчанию

Метод сворачивания Vim по умолчанию manualозначает, что сгибы создаются вручную; не иначе, там нет складка быть закрыты или открыты с помощью za, zoили , zcкак вы описали. Но вы можете создать сгиб zf{motion}в обычном режиме или zfв визуальном режиме; Например, zfjсоздает сгиб для текущей строки и следующей следующей в обычном режиме.

Сложить по indent

Принятый ответ @Anthon описывает, как установить метод сворачивания в indent; т. е. складывание определяется уровнем выемок.

Сложить по syntax

Более удобным способом сгибы могут создаваться автоматически на основе синтаксиса языка текущего буфера. Если вы используете язык программирования, назовем его L , и у вас есть сворачиваемое определение L (например, вы установили плагин Vim, в котором определена информация сворачивания L ; например, c.vim для C / C ++ или python -mode для Python), вам просто нужно установить метод сворачивания syntax:

set foldmethod=syntax

Вот и все. Наиболее полезные команды для работы со складками:

  • zo открывает складку у курсора.
  • zShift+ oоткрывает все складки у курсора.
  • zc закрывает складку у курсора.
  • zmувеличивает на foldlevelодин.
  • zShift+ mзакрывает все открытые складки.
  • zrуменьшает на foldlevelодин.
  • zShift+ rуменьшает foldlevelдо нуля - все сгибы будут открыты.
карикатурист
источник
14

Вам не нужно использовать это систематически: я обычно вручную выбираю сгибы по движению или сечению. Например, сворачивание абзаца zfipи сворачивание следующих 20 строк zf20j. Используйте zaдля переключения и zdудаления.

Это требует немного больше работы, но позволяет вашему складыванию отражать поставленную задачу.

Мармадук
источник
4

Вы можете включить foldingв текущей сессии, как ответ @ Anthon. Но если вы хотите сделать его постоянным, вы должны установить по крайней мере эту строку .vimrcдля фальцовки:

set foldmethod=indent

indent вид складывания, вы можете увидеть больше от :help foldmethod

'foldmethod' 'fdm'      string (default: "manual")
                        local to window
                        {not in Vi}
                        {not available when compiled without the +folding
                        feature}
        The kind of folding used for the current window.  Possible values:
        fold-manual     manual      Folds are created manually.
        fold-indent     indent      Lines with equal indent form a fold.
        fold-expr       expr        'foldexpr' gives the fold level of a line.
        fold-marker     marker      Markers are used to specify folds.
        fold-syntax     syntax      Syntax highlighting items specify folds.
        fold-diff       diff        Fold text that is not changed.

Теперь, каждый раз, когда вы открываете файл vim, вы можете видеть, что код свернут в соответствии с заданным вами методом. Затем вы можете использовать za, zc, zo.

cuonglm
источник
Нет необходимости использовать vimrc, я никогда не делал этого, потому что я использую сворачивание только время от времени
Anthon
@Антон: О, конечно. Я добавлю больше информации в моем ответе.
Cuonglm