Подтвердить что ты не робот

Развернуть текст в vim

Вопрос ниже имеет значение, когда вы хотите скопировать текст из Vim в другое, скажем, в веб-браузер.

У меня обычно есть опция tw=80, когда я редактирую файлы, особенно файлы LaTeX. Однако, скажем, я хочу написать письмо в Vim с параметром tw=80, а затем я хочу скопировать и вставить его в веб-браузер. Прежде чем копировать и вставлять, я хочу развернуть текст так, чтобы не было разрыва строки каждые 80 символов или около того. Я пробовал tw=0, а затем gq, но это просто обертывает текст по умолчанию шириной 80 символов. Мой вопрос в том, как я разворачиваю текст, чтобы каждый абзац моего письма отображался как одна строка? Есть ли для этого легкая команда?

4b9b3361

Ответ 1

Перейдите к началу абзаца и введите:

v i p J

Весь документ объединяет его с нормой:

:%norm vipJ

Эта команда только разворачивает абзацы. Я думаю, это поведение, которое вы хотите.

Ответ 2

Поскольку соединение строк абзаца с использованием команд Normal mode уже покрывается другой ответ, рассмотрим решение той же проблемы с помощью line-ориентированные команды Ex.

Предположим, что курсор расположен в первой строке абзаца. Затем разверните его, можно просто присоединиться к следующим следующим строкам до последней строки этот пункт. Удобный способ сделать это - запустить команду :join разработанный специально для этой цели. Чтобы определить диапазон строк для команды работать, помимо очевидной стартовой линии, которая является текущей, это необходимо указать конечную строку. Его можно найти, используя шаблон соответствующий самому концу абзаца, то есть символ новой строки, за которым следует пустая строка. Таким образом, перевод указанного определения в синтаксис Ex-команды, мы получим:

:,-/\n$/j

Чтобы все абзацы были развернуты, запустите эту команду в первой строке каждый абзац. Полезный инструмент для перехода через них, повторяющий данный последовательность действий - это команда :global. Поскольку :global сканирует строки из сверху вниз, первая строка абзаца - это только первая непустая строка среди оставшихся необработанных. Это наблюдение дает нам команду

:g/./,-/\n$/j

который более эффективен, чем его простые аналогово-нормальные моды.

Ответ 3

Проблема с :%norm vipJ заключается в том, что если у вас последовательные строки короче 80 символов, они также присоединятся к ним, даже если они разделены пустой строкой. Например, следующий пример:

# Title 1

## Title 2

Станет:

# Title 1 ## Title 2

С ответом ib проблема связана со списками:

- item1
- item2

становится:

- item1 - item2

Благодаря этот пост форума Я обнаружил еще один способ достижения этого, который я завернул в функцию, которая работает намного лучше для меня, поскольку она не" t выполните любое из следующих действий:

function! SoftWrap()
    let s:old_fo = &formatoptions
    let s:old_tw = &textwidth
    set fo=
    set tw=999999 " works for paragraphs up to 12k lines
    normal gggqG
    let &fo = s:old_fo
    let &tw = s:old_tw
endfunction

Изменить: Обновлен метод, потому что я понял, что он не работает над установкой Linux. Удалите строки, содержащие fo, если эта новая версия не работает с MacVim (у меня нет возможности протестировать).