Vim Markdown considera il blocco di codice recintato come un commento

Sep 09 2020

Uso una formattazione automatica del testo piuttosto elegante per 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

Questo rientra automaticamente elenca e mantiene brevi i miei blocchi di testo inserendo automaticamente interruzioni o rimuovendole dove appropriato.

Tuttavia questo comportamento mi intralcia quando inserisco il codice protetto, poiché Vim cerca di unire le righe non separate da un paragrafo insieme fino a raggiungere la larghezza del testo.

Posso disabilitare del tutto la formattazione automatica nel codice protetto? Come sarebbe comments=trattare tutto tra

```
fenced code
```

come commento Vim non dovrebbe formattare automaticamente? Vedi l'assenza di formatoptions=-ccui sopra che presumo Vim prenderebbe per lasciare i miei commenti da soli.

Risposte

2 MaximKim Sep 14 2020 at 20:19

Temo che sia "impossibile" a che fare con comments. Il fatto è che non analizza se è in commenti reali o no - in realtà viene trattato come commenti reali. È stato solo dirottato per gli elementi dell'elenco in quanto sono simili in asciidoc e markdown a ciò che sono i commenti C-like:

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

Quindi, se si preme invio dopo la riga di commento 2, continuerà sulla riga successiva precedendo un "punto elenco".

Ovviamente puoi provare a implementare la tua soluzione:

  1. mappa <CR>in modalità di inserimento su una funzione in cui è necessario analizzare l'ambiente circostante, come la ricerca all'indietro per l'inizio di un blocco recintato e lo spegnimento commentsse trovato

  2. o fai lo stesso senza commentsma con la tua implementazione dell'inserimento di punti elenco.

Ma sarebbe fragile o lento o entrambe le cose.