Vim Markdown behandelt eingezäunten Codeblock als Kommentar

Sep 09 2020

Ich benutze eine ziemlich raffinierte automatische Textformatierung für Markdown:

(Gesehen 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

Durch diesen automatischen Einzug werden meine Textblöcke aufgelistet und kurz gehalten, indem automatisch harte Unterbrechungen eingefügt oder gegebenenfalls entfernt werden.

Dieses Verhalten stört mich jedoch bei der Eingabe von eingezäuntem Code, da Vim versucht, Zeilen, die nicht durch einen Absatz getrennt sind, zusammenzuführen, bis die Textbreite erreicht ist.

Kann ich die automatische Formatierung in eingezäuntem Code vollständig deaktivieren? Wie würde es comments=aussehen, alles dazwischen zu behandeln?

```
fenced code
```

als Kommentar sollte Vim nicht automatisch formatieren? Sehen Sie das Fehlen von formatoptions=-coben, von dem ich annehme, dass Vim meine Kommentare in Ruhe lassen würde.

Antworten

2 MaximKim Sep 14 2020 at 20:19

Ich fürchte, es ist "unmöglich", damit zu tun comments. Die Sache ist, es analysiert nicht, ob es sich um echte Kommentare handelt oder nicht - es wird tatsächlich als echte Kommentare behandelt. Es wurde nur für Listenelemente entführt, da sie in Asciidoc und Markdown den C-ähnlichen Kommentaren ähnlich sind:

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

Wenn Sie also nach Kommentarzeile 2 die Eingabetaste drücken, wird diese in der nächsten Zeile mit einem "Aufzählungszeichen" fortgesetzt.

Natürlich können Sie versuchen, Ihre eigene Lösung zu implementieren:

  1. Ordnen Sie <CR>im Einfügemodus einer Funktion zu, bei der Sie die Umgebung analysieren müssen, z. B. rückwärts nach einem eingezäunten Block suchen und ausschalten, commentswenn er gefunden wird

  2. oder machen Sie dasselbe ohne, commentsaber mit Ihrer eigenen Implementierung des Einfügens von Aufzählungszeichen.

Aber es wäre zerbrechlich oder langsam oder beides.