Formatação automática: quebra automática de linha ao inserir texto

9

Depois de ler help textwithe help fo-table, eu esperava que quando eu definir

set textwidth=20  " for demonstration
set formatoptions=tcq

a inserção de texto sempre acabaria com a quebra de uma linha, mas esse não é o caso. A quebra ocorre apenas no (ou antes) meu cursor. E se eu colar, o embrulho não acontece.

Exemplo (Vim 7.4):

12345678901234567890
This is a long line

A linha será quebrada automaticamente se eu clicar Ae começar a digitar.

Mas se eu pressionar 02wie digitar "still", não será possível:

12345678901234567890
This is still a long line

Eu tenho que digitar outros 7 caracteres antes de quebrar, e o problema continua na próxima linha:

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

A colagem também não aciona uma quebra:

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

Eu acho que o que eu quero é set fo+=amas isso se aplica no nível do parágrafo, enquanto eu não quero que a formatação automática de uma linha se espalhe para outras linhas.

Ou estou faltando uma opção?

Para ficar claro, após o lançamento vim -u NONE, é isso que digito (menos comentários):

: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
fonte
11
Isso parece funcionar bem para mim. Iniciei o Vim vim -u NONEpara impedir o carregamento de um arquivo vimrc. Isso resolve o problema para você? Qual versão do Vim você está usando?
Martin Tournoij
Não, isso não ajuda. Vim 7.4 no Windows e Ubuntu.
mgiuffrida
Está pastedefinido acidentalmente? Tente:set paste?
Volker Siegel
@VolkerSiegel não, pastenão está definido. Quando pasteestá definido, nenhuma quebra acontece.
mgiuffrida

Respostas:

2

Me deparei com uma solução parcial, usando formatoptions=tcqaw. Basicamente, você ainda quebra automaticamente os parágrafos, mas um parágrafo termina quando a linha não possui espaço em branco à direita, o que é adequado para muitos casos.

Usando seu exemplo (com uma ligeira modificação, sem desfazer e usando " <SPACE>This ..."), obtenho este resultado:

This is still a long  
This is pasted and 
not wrapped
line
Beka
fonte