Ответ 1
Перейдите к началу абзаца и введите:
v i p J
Весь документ объединяет его с нормой:
:%norm vipJ
Эта команда только разворачивает абзацы. Я думаю, это поведение, которое вы хотите.
Вопрос ниже имеет значение, когда вы хотите скопировать текст из Vim в другое, скажем, в веб-браузер.
У меня обычно есть опция tw=80
, когда я редактирую файлы, особенно файлы LaTeX. Однако, скажем, я хочу написать письмо в Vim с параметром tw=80
, а затем я хочу скопировать и вставить его в веб-браузер. Прежде чем копировать и вставлять, я хочу развернуть текст так, чтобы не было разрыва строки каждые 80 символов или около того. Я пробовал tw=0
, а затем gq
, но это просто обертывает текст по умолчанию шириной 80 символов. Мой вопрос в том, как я разворачиваю текст, чтобы каждый абзац моего письма отображался как одна строка? Есть ли для этого легкая команда?
Перейдите к началу абзаца и введите:
v i p J
Весь документ объединяет его с нормой:
:%norm vipJ
Эта команда только разворачивает абзацы. Я думаю, это поведение, которое вы хотите.
Поскольку соединение строк абзаца с использованием команд Normal mode уже покрывается другой ответ, рассмотрим решение той же проблемы с помощью line-ориентированные команды Ex.
Предположим, что курсор расположен в первой строке абзаца. Затем
разверните его, можно просто присоединиться к следующим следующим строкам до последней строки
этот пункт. Удобный способ сделать это - запустить команду :join
разработанный специально для этой цели. Чтобы определить диапазон строк для команды
работать, помимо очевидной стартовой линии, которая является текущей, это
необходимо указать конечную строку. Его можно найти, используя шаблон
соответствующий самому концу абзаца, то есть символ новой строки, за которым следует
пустая строка. Таким образом, перевод указанного определения в синтаксис Ex-команды, мы
получим:
:,-/\n$/j
Чтобы все абзацы были развернуты, запустите эту команду в первой строке
каждый абзац. Полезный инструмент для перехода через них, повторяющий данный
последовательность действий - это команда :global
. Поскольку :global
сканирует строки из
сверху вниз, первая строка абзаца - это только первая непустая строка
среди оставшихся необработанных. Это наблюдение дает нам команду
:g/./,-/\n$/j
который более эффективен, чем его простые аналогово-нормальные моды.
Проблема с :%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 (у меня нет возможности протестировать).