Как я могу автоматически сложить длинный код C в Vim? - PullRequest
3 голосов
/ 18 апреля 2009

Я регулярно сталкиваюсь с С-кодами без сворачивания. Их раздражает читать, если нет складывания, особенно с длинными файлами. Как я могу сложить их?

Ответы [ 6 ]

12 голосов
/ 18 апреля 2009

Сложить в соответствии с синтаксисом

:set foldmethod=syntax

Если вы хотите сделать это вручную на битах, которые хотите сложить

:set foldmethod=manual

затем создайте новые сгибы, выбрав / переместив и нажав zf например,

shift-v j j zf

(игнорируя пробелы)

Редактировать: См. Также комментарии к этому ответу для отступов и маркеров.

5 голосов
/ 18 апреля 2009

Я думаю, что вы, возможно, перепутали терминологию. Нужно ли вам «оборачивать» или «складывать». Обтекание - это то, где строки, которые обычно не помещаются на экране из-за их длины, оборачиваются, то есть отображаются на нескольких последовательных строках на экране (фактически это одна строка в нескольких строках - трудно объяснить, лучше всего увидеть практика).

Упаковка в vim устанавливается

:set wrap

чтобы включить его и

:set textwidth=80

, чтобы определить, где vim должен переносить текст (обычно 80 символов - хороший показатель).

С другой стороны, складывание - это совсем другое дело. Это та, где vim складывает несколько строк кода (например, функцию) в одну строку кода. Это полезно для повышения читабельности кода. В Vim есть несколько методов складывания, вы можете увидеть их все, если вы

:help folding

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

2 голосов
/ 16 марта 2017

Я свернул плагин fold для C и C ++ . Он выходит за рамки того, что делается со свертыванием синтаксиса (может быть, его можно улучшить, я не знаю), и оставляет менее шумные и не очень полезные вещи по сравнению с отступом и сворачиванием на основе маркеров.

Предостережение: чтобы иметь приличное время реакции, мне пришлось сделать несколько упрощений, и иногда результат довольно запутан (мы должны набрать zx, чтобы исправить это).

Вот небольшой скринкаст, чтобы увидеть, как плагин сворачивает правильно сбалансированный исходный код C ++, который в настоящее время не изменяется: (

enter image description here

1 голос
/ 18 апреля 2009

В vi (в отличие от vim) ответ был:

:set wm=1

Устанавливает поле переноса на один символ перед концом строки. Это не лучшая в мире спецификация для окон переменного размера (она имела смысл с зелеными экранами, когда было трудно изменить размер).

Это означает, что есть и альтернативный способ сделать это в vim:

:set textwidth=30

См .: Руководство пользователя VimDoc, раздел 25.1

0 голосов
/ 16 марта 2017

На самом деле есть еще один очень прямой и эффективный способ, который использует foldmethod = marker и устанавливает foldmarker равным {,}. Тогда результат сгиба будет выглядеть так:

  1. все функции сложены. По сути, это выглядит как контур в IDE. (и вы также можете set foldlevel=1 или более, если вы не хотите складывать все в начале)

enter image description here

  1. это то, как выглядит нормальная функция, когда вы открываете ее с уровнем-1 через zo.

enter image description here

Кроме того, для свертывания по синтаксису требуется дополнительная работа, и вот хороший учебник об этом. Но я думаю, что сгиба на marker={,} вполне достаточно, и самое главное, он прост и аккуратен.

0 голосов
/ 18 апреля 2009

Вероятно, вам нужна настройка

:set foldmethod=syntax

Но не вставляйте это вручную! Это упускает одну из самых больших функций Vims, которая имеет встроенные пользовательские настройки для сотен типов файлов. Чтобы получить это, добавьте это в ваш ~ / .vimrc

filetype plugin on
filetype indent on

Обнаружение типов файлов в основном основано на расширении, в данном случае * .c файлов. Смотрите: help: filetype для получения дополнительной информации. Вы также можете настроить эти параметры на основе типов файлов.

...