Автоформат: перенос текста позже при вставке текста

9

После прочтения help textwithи help fo-tableя ожидал, что когда я установил

set textwidth=20  " for demonstration
set formatoptions=tcq

тогда вставка текста всегда приводит к переносу строки, но это не так. Обтекание происходит только в (или перед) моем курсоре. И если я вставлю, обертывание не произойдет вообще.

Пример (Vim 7.4):

12345678901234567890
This is a long line

Строка будет автоматически перенесена, если я нажму Aи начну печатать.

Но если я нажму 02wiи введу «все еще», это не переносится:

12345678901234567890
This is still a long line

Я должен набрать еще 7 символов, прежде чем он будет перенесен, а затем проблема продолжится в следующей строке:

12345678901234567890
This is still more <-- it wraps here
typing and again a long line

Вставка также не вызывает переноса:

12345678901234567890
This is a long line This text is pasted and not wrapped

Я думаю, что я хочу, set fo+=aно это применимо на уровне абзаца, тогда как я не хочу, чтобы автоматическое форматирование одной строки распространялось на другие строки.

Или я пропускаю вариант?

Чтобы быть понятным, после запуска vim -u NONE, это то, что я печатаю (меньше комментариев):

:set textwidth=20<CR>
:set formatoptions=tcq<CR>
iThis is a long line<ESC>
02wistill <ESC>                " no wrap happens, but I'd like it to
u
:let @r = "This text is pasted and not wrapped"<CR>
$"rp                           " no wrap happens, but I'd like it to
mgiuffrida
источник
1
Это, кажется, работает хорошо для меня. Я запустил Vim vim -u NONEдля предотвращения загрузки файла vimrc. Решает ли это проблему для вас? Какую версию Vim вы используете?
Мартин Турной
Нет, это не помогает. Vim 7.4 на Windows и Ubuntu.
mgiuffrida
Является ли pasteустановить, случайно? Попробуй:set paste?
Фолькер Сигел
@VolkerSiegel нет, pasteне установлено. Когда pasteустановлено, обертывание не происходит вообще.
mgiuffrida

Ответы:

2

Я наткнулся на частичное решение, используя formatoptions=tcqaw. По сути, вы по-прежнему автоматически переносите абзацы, но абзац заканчивается, когда в строке нет завершающего пробела, что подходит для многих случаев.

Используя ваш пример (с небольшой модификацией, без отмены и используя « <SPACE>This ...»), я получаю такой результат:

This is still a long  
This is pasted and 
not wrapped
line
Бека
источник