Как я могу обернуть текст в Vim? - PullRequest
97 голосов
/ 05 мая 2009

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

aaaaaaaaaaaaa 
bbbbbbbbbbbbb 
ccccccccccccc 
etc

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

aaaaa
aaaaa
bbbbb
bbbbb
ccccc
ccccc
etc

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

Ответы [ 5 ]

173 голосов
/ 05 мая 2009

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

  1. Позвольте vim форматировать (т.е. изменить) ваш текст, чтобы иметь более короткие строки, вставляя переносы строк
  2. Оставьте строки такими, какие они есть, но отобразите их заверните

Что вы хотите?

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

Вариант 2 можно включить, запустив :set wrap / :set nowrap. Это приведет к переносу строк, которые слишком длинны для окна.

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

58 голосов
/ 05 мая 2009

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

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

gqq (wrap the current line)
gq} (wrap this 'paragraph', i.e. until the next blank line)
:h gq
21 голосов
/ 05 мая 2009

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

:%!fold -w5 

Результат:

aaaaa
aaaaa
aaa 
bbbbb
bbbbb
bbb 
ccccc
ccccc
ccc
14 голосов
/ 05 мая 2009
:set textwidth=30
8 голосов
/ 16 марта 2013

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

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

разорвет все строки на 80 символов.

...