Impedir que o Vim interrompa links no meio da tag na remarcação


16

Digamos que eu tenho esse arquivo Markdown:

[Lorem ipsum dolor sit ](http://vi.stackexchange.com/many-links-are-often-very)

Parece bom. Mas o link não terminou, então eu digito -longe agora o Vim quebra a linha:

[Lorem ipsum dolor sit
](http://vi.stackexchange.com/many-links-are-often-very-long)

Devido à minha textwidth=80configuração ... Embora quebrar um link no meio da tag seja uma remarcação tecnicamente válida, ele parece muito desagradável no IMHO; ter arquivos de origem com boa aparência é uma espécie de ponto de remarcação.

Com gqo problema é muitas vezes ainda pior:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus.
Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra nec
[Lorem ipsum dolor sit](http://vi.stackexchange.com/many-links-are-often-very-very-long)

Torna-se isso:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec a diam lectus.
Sed sit amet ipsum mauris. Maecenas congue ligula ac quam viverra nec [Lorem
ipsum dolor
sit](http://vi.stackexchange.com/many-links-are-often-very-very-long)

Existe alguma maneira de dizer ao Vim ou à sintaxe de remarcação para não quebrar links dessa maneira?

  • Talvez tratando o link inteiro (de [para )) como uma única palavra.
  • Eu tenho o mesmo problema com o [this][type]link de remarcação.

Respostas:


9

No passado, tive problemas semelhantes com assinaturas de funções. Aqui está a solução adaptada ao seu problema. Adicionar a .vimrc:

au CursorMovedI *.md call ModifyTextWidth() " Use only within *.md files

function! ModifyTextWidth()
    if getline(".")=~'^.*\[.*\](.*)$' " If the line ends with Markdown link - set big value for textwidth
        setlocal textwidth=500
    else
        setlocal textwidth=80 " Otherwise use normal textwidth
    endif
endfunction

Observe que você pode alterar a '^.*\[.*\](.*)$'regex. Atualmente, se houver algum texto após o link, a linha poderá ser quebrada como no seu exemplo. No entanto, se o regex corresponder linhas com links em qualquer lugar dentro, outro problema pode aparecer:

Some info [here](https://www.google.com). Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris

Neste exemplo, a quebra de linha não é inserida depois amet,e deve ser adicionada manualmente.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.