Как я могу автоматически сворачивать длинный C-код в Vim?
Вопрос
Я регулярно сталкиваюсь с C-кодами без сворачивания.Чтение их без складывания вызывает раздражение, особенно при работе с длинными файлами.Как я могу их сложить?
Решение
Сворачивать в соответствии с синтаксисом
:set foldmethod=syntax
Если вы хотите сделать это вручную с теми частями, которые вы хотите сложить
:set foldmethod=manual
затем создайте новые сгибы, выбрав / переместив и нажав zf например
shift-v j j zf
(игнорируя пробелы)
Редактировать:Также смотрите Комментарии к этому ответу о методах складывания отступов и маркеров.
Другие советы
Я думаю, что вы, возможно, перепутали терминологию.Вам нужно "заворачивать" или "складывать"?Обертывание - это обертывание строк, которые обычно не помещаются на экране из-за их длины, т. е.показано несколькими последовательными строками на экране (на самом деле, это одна строка, в нескольких строках - трудно объяснить, лучше всего увидеть на практике).
В vim обертывание задается с помощью
:set wrap
чтобы включить его, и
:set textwidth=80
чтобы определить, куда vim должен переносить текст (обычно 80 символов - хороший показатель).
Складывание, с другой стороны, - это совершенно другое дело.Это тот, где vim сворачивает несколько строк кода (например, функцию) в одну строку кода.Это полезно для повышения читабельности кода.Vim имеет несколько методов сворачивания, вы можете увидеть все из них, если вы
:help folding
Я думаю, то, что вы ищете, было бы синтаксическим сворачиванием, но я могу ошибаться.Я рекомендую прочитать страницу справки, она не длинная и очень полезная.
Я свернул плагин fold для C и C++.Это выходит за рамки того, что делается с помощью сворачивания синтаксиса (возможно, это можно было бы улучшить, я не знаю), и оставляет менее шумные и не очень полезные вещи развернутыми по сравнению с сворачиванием на основе отступов и маркеров.
Предостережение:чтобы обеспечить приличное время реакции, мне пришлось внести некоторые упрощения, и иногда результат получается довольно сумбурным (нам приходится набирать zx
чтобы это исправить).
Вот небольшой скринкаст, чтобы увидеть, как плагин сворачивает правильно сбалансированный исходный код C ++, который в настоящее время не модифицируется : (
В vi (в отличие от vim) ответ был:
:set wm=1
Это устанавливает поле переноса равным одному символу до конца строки.Это не лучшая в мире спецификация с окнами переменного размера (это имело смысл с зелеными экранами, когда было трудно изменить размер).
Это означает, что есть также альтернативный способ сделать это в vim:
:set textwidth=30
Вам, вероятно, нужна настройка
:set foldmethod=syntax
Но не вводите это вручную!Это упускает из виду одну из самых больших функций Vims, которая имеет пользовательские настройки для сотен типов файлов, уже встроенных.Чтобы получить это, добавьте это в свой ~/.vimrc
filetype plugin on
filetype indent on
определение типа файла в основном основано на расширении, в данном случае файлов *.c.Смотрите :справка : тип файла для получения дополнительной информации.Вы также можете настроить эти параметры на основе типа файла.
На самом деле, есть еще один очень прямой и эффективный способ, который заключается в использовании foldmethod = marker
и установить foldmarker
быть {,}
.Тогда результат сгиба будет выглядеть следующим образом:
- все функции свернуты.В принципе, это выглядит как контур в IDE.(и вы также можете
set foldlevel=1
или больше, если вы не хотите складывать все в самом начале)
- вот как выглядит обычная функция, когда вы открываете ее с помощью level-1 через
zo
.
Кроме того, для выполнения сворачивания по синтаксису требуется немного дополнительной работы, и вот хороший Учебник об этом.Но я думаю, что сбросьте marker={,}
этого вполне достаточно, и самое главное, это просто и аккуратно.