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

StackOverflow https://stackoverflow.com/questions/762310

  •  11-09-2019
  •  | 
  •  

Вопрос

Я регулярно сталкиваюсь с 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 ++, который в настоящее время не модифицируется : (

enter image description here

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

:set wm=1

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

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

:set textwidth=30

Видишь: Руководство пользователя VimDoc Раздел 25.1

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

:set foldmethod=syntax

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

filetype plugin on
filetype indent on

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

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

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

enter image description here

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

enter image description here

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top