Blogbeiträge mit Neovim und Markdown erstellen

Ich wurde via Mail gefragt ob es nicht einfacher wäre das HTML direkt zu erstellen, da ich so mehr Formatierungsmöglichkeiten hätte bzw. ob ein WYSIWYG nicht angenehmer wäre. Nein. Aus mehreren Gründen. Kein WYSIWYG-Editor wird auch nur ansatzweise so umfangreich zu konfigurieren sein wie (Neo)Vim oder GNU Emacs in einer Tmux-Session. Blogartikel werden bei mir in einer extra Tmux-Session erstellt; das Hauptpane nimmt ~80% des Bildschirms ein und die restlichen 20% in einem horizontal gesplittetem Pane unterhalb. Dort läuft dann das Kommando marmite foo bar --watch --serve, welches "marmite" einen lokalen Webserver starten und mir dort die Ausgabe als fertigen Artikel im Browser anzeigt. Zwischen den einzelnen Panes und ggf. Splits von Neovim kann ich dank vim-tmux-navigator bequem mit Strg+{h,j,k,l,} hin- und her navigieren.
Wenn ich z. B. (wieso auch immer) eine Tabelle im Artikel erstellen will, reicht ein 3x2table gefolgt von einem Enter ruft folgendes Snippet auf

    "Insert 3x2 table": {
      "prefix": "3x2table",
      "body": [
        "| ${1:Column1}   | ${2:Column2}    |",
        "|--------------- | --------------- |",
        "| ${3:Item1.1}   | ${4:Item2.1}   |",
        "| ${5:Item1.2}   | ${6:Item2.2}   |",
        "${0}"
      ],
      "description": "Insert table with 3 rows and 2 columns. First row is heading."
    },

Es wird lediglich das eingefügt, das in der Sektion "body" steht und der Cursor wird auf "${1:Column1}" gesetzt. Da kann ich jetzt irgendwas schreiben und mit Tab zu "${2:Column2}" springen usw. Oder mit Shift+Tag wieder zu "${1:Column1}" zurück. Das ganze kann man auch noch weiter ausbauen und Plugins wie Inline Vorschau von Bildern, zwischen Fußnoten hin- und herspringen oder Headern nutzen bzw. (Neo)Vims https://neovim.io/doc/user/fold dazu verwenden um die Header von Markdown zuzuklappen (oder halt auf).

Die Snippet-Engine (in meinem Fall LuaSnip) arbeitet perfekt mit meiner Faulheit zusammen. Wenn ich z. B. aus einem Newsartikel zitiere, reicht ein bqu aus, welches dann folgenden Textbaustein einfügt

>>>
foobar

<cite class="cblock">URL<cite>
>>>
text

Die drei >>> sorgen dafür das alles dazwischen in einen Blockquote-Tag gepackt wird; also nichts anderes als würde man jede Zeile mit einem > beginnen. Der Cursor wird automatisch auf "foobar" gesetzt und ein anschließendes Tab bringt mich zu "URL" und ein weiterer Tab zu text. Ich kann auch HTML direkt eingeben, wobei die Tags dann automatisch geschlossen werden oder ich alles dazwischen löschen/ändern oder einfach heraus springen kann; nvim-ts-autotag macht es möglich. Die Formatierungen sind auch kein Problem, da ich einfach das CSS anpassen muss und dann wie gesagt den HTML-Code direkt eingeben kann; selbstverständlich mit Unterstützung von LSP.
Wenn ich dann fertig mit dem schreiben bin, dann reicht ein Strg a Z und Tmux startet ein neues Window, ruft ein Script auf welches den Artikel auf meinen Server hochlädt und ihn dort in meinem Blog postet.

Wer einen WYSIWYG-Editor verwenden will, der soll das gerne tun. Ich bin schlicht und einfach zu faul für sowas.

For comments, please send me an email