Blogbeiträge mit Neovim und Markdown erstellen
Geschrieben am 13-02-2025 - ⧖ 3 minIch 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.