Como quebrar uma linha no vim com a quebra automática de parágrafo?

1

Estou tentando usar a funcionalidade autowrap do vim para agrupar automaticamente meu parágrafo em linhas de no máximo 80 letras em tempo real enquanto digito. Isso pode ser feito por set textwidth=80 e set fo+=a . A opção a do vim formatoptions ou fo basicamente diz ao vim para encapsular o parágrafo inteiro enquanto digita.

No entanto, há um efeito colateral muito chato, que eu não consigo mais quebrar uma linha simplesmente pressionando enter.

This is a sample sentence.

Diga a frase acima, se eu quiser entrar em:

This is

a sample sentence.

Normalmente, posso apenas mover o cursor para "a" e entrar no modo de inserção e, em seguida, pressione enter. Mas depois de set fo+=a , nada acontecerá quando eu pressionar Enter no modo de inserção em "a". Uma coisa que eu noto é que, se não houver espaço entre "é" e "a", pressionar enter irá inserir um espaço. Mas nada mais acontecerá depois disso.

Então, o que sinto falta aqui? Como eu paro esse comportamento irritante?

    
por huangzonghao 15.02.2018 / 01:04

2 respostas

0

Depois de alguma exploração, descubro uma solução alternativa que pode resolver o problema até certo ponto, embora não seja perfeita.

A ideia básica é que ao inserir uma quebra de linha, desabilite o empacotamento automático temporariamente ao enviar <CR> e retome o empacotamento automático depois disso. Existem várias maneiras de fazer isso. E o melhor, até onde eu sei, é usar o modo colar, já que você não precisa sair do modo de inserção ao entrar no modo de colar. Portanto, basta fazer os seguintes comandos em qualquer ligação de tecla que você goste no modo de inserção. O que estou usando agora é inoremap <C-N> <F2><CR><F2>

O motivo pelo qual eu acho que este não é o ideal é que, por algum motivo, não consigo vincular <Enter> dessa maneira, mas tenho que usar outra chave.

Se <Enter> ou <CR> puder ser configurado dessa forma, o problema será 100% resolvido.

    
por 16.02.2018 / 05:26
1

A formatação automática parece um recurso interessante, mas na prática eu nunca encontrei um uso, exceto para parágrafos puros e simples de texto.

Você identificou corretamente o conflito entre o empacotamento automático do Vim e a necessidade de influenciar manualmente as quebras de linha. O :help autoformat do Vim oferece a seguinte solução alternativa:

  • You need to properly define paragraphs. The simplest is paragraphs that are separated by a blank line. When there is no separating blank line, consider using the 'w' flag and adding a space at the end of each line in the paragraphs except the last one.

Portanto, com :setlocal fo+=w , você pode pressionar <Enter> para introduzir um disco rígido. A desvantagem é que todas as linhas dentro dos parágrafos têm um caractere de espaço à direita.

    
por 15.02.2018 / 13:02