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

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

  •  05-07-2019
  •  | 
  •  

Вопрос

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

aaaaaaaaaaaaa 
bbbbbbbbbbbbb 
ccccccccccccc 
etc

хотелось бы поменьше:

aaaaa
aaaaa
bbbbb
bbbbb
ccccc
ccccc
etc

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

Это было полезно?

Решение

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

<Ол>
  • Позвольте vim форматировать (т.е. изменить) ваш текст, чтобы иметь более короткие строки, вставляя переносы строк
  • Оставьте строки как есть, но отобразите их завернутые
  • Что вы хотите?

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

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

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

    Другие советы

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

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

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

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

    :%!fold -w5 
    

    Результат:

    aaaaa
    aaaaa
    aaa 
    bbbbb
    bbbbb
    bbb 
    ccccc
    ccccc
    ccc
    
    :set textwidth=30
    

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

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

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

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