Vim Markdown trata o bloco de código protegido como comentário

Sep 09 2020

Eu uso uma formatação de texto automática bastante bacana para Markdown:

(Visto https://asciidoc.org/userguide.html#X61)

augroup TXT | au!
  autocmd FileType asciidoc,markdown
    \ setlocal autoindent expandtab tabstop=8 softtabstop=2 shiftwidth=2
    \ textwidth=70 wrap formatoptions=atqn
    \ formatlistpat=^\\s*\\d\\+\\.\\s\\+\\\\|^\\s*<\\d\\+>\\s\\+\\\\|^\\s*[a-zA-Z.]\\.\\s\\+\\\\|^\\s*[ivxIVX]\\+\\.\\s\\+
    \ comments=s1:/*,ex:*/,://,b:#,:%,:XCOMM,fb:-,fb:*,fb:+,fb:.,fb:>
    \ listchars=tab:»·,trail:·
    \ list |
  autocmd FileType asciidoc,markdown silent! %foldopen!
augroup END

Este auto-recua lista e mantém meus blocos de texto curtos, inserindo automaticamente quebras rígidas ou removendo-as quando apropriado.

No entanto, esse comportamento me atrapalha ao inserir o código protegido, pois o Vim tenta mesclar as linhas não separadas por um parágrafo até que a largura do texto seja atingida.

Posso desabilitar a formatação automática em código protegido? Como seria comments=tratar tudo entre

```
fenced code
```

como um comentário O Vim não deve formatar automaticamente? Veja a ausência de formatoptions=-cacima que eu suponho que Vim iria aproveitar para deixar meus comentários sozinho.

Respostas

2 MaximKim Sep 14 2020 at 20:19

Receio que seja "impossível" fazer isso comments. A questão é que ele não analisa se está em comentários reais ou não - na verdade, é tratado como comentários reais. Ele foi apenas sequestrado para itens de lista, pois eles são semelhantes em asciidoc e markdown ao que comentários do tipo C são:

/*****************************
* comment line 1
* comment line 2
******************************/

Portanto, se você pressionar Enter após a linha de comentário 2, ele continuará na próxima linha precedendo um "marcador".

Claro, você pode tentar implementar sua própria solução:

  1. mapear <CR>no modo de inserção para uma função onde você tem que analisar os arredores, como pesquisar para trás por um bloco cercado iniciar e desligar commentsse for encontrado

  2. ou faça o mesmo sem, commentsmas com sua própria implementação de inserção de marcador.

Mas seria frágil ou lento ou ambos.