Як я можу обернути текст на деяку довжину у Vim?


102

Поговоримо про відносні заходи. Мій Vim виглядає так:

aaaaaaaaaaaaa 
bbbbbbbbbbbbb 
ccccccccccccc 
etc

Я хотів би, щоб він був меншим:

aaaaa
aaaaa
bbbbb
bbbbb
ccccc
ccccc
etc

Як я можу це отримати? І як я можу керувати встановленням довжини такого блоку?


Ви маєте на увазі обгортковий текст, а не відступ тексту?
лк.

lc: я не знаю різниці. Я збирався писати обгортання так, як мені було рекомендовано, але я ніколи не працював.
Лео Леопольд Герц 준영

Відповіді:


177

Насправді ви можете зробити дві речі:

  1. Дозвольте формату vim (тобто змінити) текст у коротших рядках, вставляючи рядкові рядки
  2. Залиште рядки такими, якими вони є, але відображте їх загорнутими

Якого ти хочеш?

Варіант 1 буде досягнутий шляхом встановлення textwidth(наприклад :set textwidth=30(з відповіді Swaarop)). Потім ви можете переформатувати текст, виділивши його (у візуальному режимі) та набравши текст gq. ( textwidthможе бути скорочено як tw, таким чином :set tw=30.)

Варіант 2 можна змінити, запустивши :set wrap/ :set nowrap. Це дозволить обернути лінії, які занадто довгі для вікна.

Обидва незалежні.


33
+1 для команди gq key у візуальному режимі, що надзвичайно корисно
Fire Crow

3
FYI це розбиває на пробіли, і gqgq нічого не робить для рядка, як показано у питанні, навіть якщо tw = 5.
dlamblin

2
@Dlamblin: Правильно. Якщо ви хочете скласти рівно задану ширину, не дотримуючись пробілу, тоді використовуйте foldкоманду, як у відповіді fgm.
sleske

Наскільки я бачу, ваш варіант не працює. wrapзагорнеться на межі вікна, а не на textwidth.
DerWeh

@DerWeh: Так, обертання завершиться на межі вікна. Я відредагував, щоб уточнити.
sleske

60

Щойно ви встановите «ширину тексту», ви можете вибрати текст у візуальному режимі та натиснути gq, щоб його добре обернути (ви також можете використовувати Q у деяких старих / застарілих конфігураціях).

Кілька корисних порад:

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

3
+1, я випадково потрапив на gq, перебуваючи у vim, провів останні півгодини, намагаючись зрозуміти, що саме я потрапив Це так корисно.
користувач176121

gqqтакож загортає поточний рядок (замість gqgqабо gq$).
Еш

21

Використання складки (1) - одна з можливостей:

:%!fold -w5 

Результат:

aaaaa
aaaaa
aaa 
bbbbb
bbbbb
bbb 
ccccc
ccccc
ccc

1
Це також не поважає простір для складання
Ліонель

7
@Lionel: Так. Щоб поважати пробіли, додайте опцію "-s" до команди fold.
sleske

14
:set textwidth=30

Як поширюється текстова ширина, якщо немає пробілів, як у прикладі оригінального плаката? У мене була гра, і, здається, вона форматується лише на основі ширини тексту, якщо є пробіли (або, мабуть, якщо змінна breakat встановлена ​​на щось інше).
Енді

3
@Andy textwidthне впорається із ситуацією без пробілів. Ви можете написати свою formatexprфункцію для цього.
Swaroop CH

8

Якщо у вас є текст без пробілів, який ви хочете розбити на певну довжину, не потрібно ні використовувати зовнішній, foldні писати власний formatexpr.

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

перерве всі рядки на 80 символів.


2
Це врятувало мені день під час відновлення сертифіката OpenSSL. Дякую
Cengiz може
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.