Можно использовать один из вариантов :set formatoptions+=n
в сочетании с пользовательским formatlistpat
. Опция n
переформатирует нумерованные списки, добавляя к пробелу эквивалентное количество пробелов. Он может быть адаптирован для использования в этом случае путем определения соответствующего лидера списка:
set fo+=n
let &flp='\w\+> '
Чтобы проиллюстрировать эффекты, рассмотрим следующий пример:
alice> foo bar baz qux foo bar baz qux
bob> foo bar baz qux foo bar baz qux
Используя tw=20
в этом случае, g q } производит:
alice> foo bar baz
qux foo bar
baz qux
bob> foo bar baz qux
foo bar baz qux
Этот метод правильно переносит строки без изменения tw
, но он только добавляет пробелы. Если перед каждой новой строкой необходимо добавить name>
требуется еще одна операция, но это, по крайней мере, обрабатывает перенос.
Кроме того, цитаты в этом формате могут рассматриваться как comments
. К сожалению, этот метод не принимает регулярные выражения и поэтому требует явных имен. Флаг b
может использоваться для запроса пробела после лидера комментария:
set comments+=b:alice>,b:bob>
При этом, используя тот же пример, что и выше, переформатирование дает:
alice> foo bar baz
alice> qux foo bar
alice> baz qux
bob> foo bar baz qux
bob> foo bar baz qux
Вот простая функция, которая использует это, и соответствующая команда для удобства:
function! Format(name1, name2)
execute "set comments+=b:" . a:name1 . ">,b:" . a:name2 . ">"
execute "normal gq}"
execute "set comments-=b:" . a:name1 . ">,b:" . a:name2 . ">"
endfunction
command! -nargs=* F call Format(<f-args>)
Таким образом :F alice bob
может быть использована для получения результатов образца выше.