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

Пусть говорят об относительных мерах. Мой Vim выглядит так:

aaaaaaaaaaaaa 
bbbbbbbbbbbbb 
ccccccccccccc 
etc

Я бы хотел, чтобы он был меньше:

aaaaa
aaaaa
bbbbb
bbbbb
ccccc
ccccc
etc

Как я могу его получить? И как я могу управлять настройкой длины такого блока?

Ответ 1

На самом деле вы можете сделать две вещи:

  • Пусть формат vim (т.е. изменит) ваш текст имеет более короткие строки, вставив строки-строки
  • Оставьте строки такими, какие они есть, но покажите их завернутыми

Что вам нужно?

Вариант 1 будет достигнут установкой textwidth (например, :set textwidth=30 (из ответа Swaarop)). Затем вы можете переформатировать текст, выделив его (в визуальном режиме) и набрав gq.

Вариант 2 можно переключить, выполнив :set wrap или :set nowrap.

Оба независимы.

Ответ 2

После того, как вы установите "textwidth", вы можете выбрать текст с визуальным режимом и нажать gq, чтобы обернуть его красиво (вы также можете использовать Q в некоторых старых/устаревших конфигурациях).

Несколько полезных советов:

gqgq (wrap the current line)
gq} (wrap this 'paragraph', i.e. until the next blank line)
:h gq

Ответ 3

Использование fold (1) - одна из возможностей:

:%!fold -w5 

Результат:

aaaaa
aaaaa
aaa 
bbbbb
bbbbb
bbb 
ccccc
ccccc
ccc

Ответ 4

:set textwidth=30

Ответ 5

Если у вас есть текст без пробелов, который вы хотите разбить на определенную длину, не нужно использовать внешний fold и не писать собственный formatexpr.

:%s/\(.\{80\}\)/\1\r/g

будет разбивать все строки на 80 символов.