Logbuch KW13 2024

Ich hatte diese Woche Urlaub und hatte es auch dringend nötig. Und ehrlich gesagt, könnte ich die nächste Wochen auch noch Urlaub machen. Zum Glück wird es nur eine kurze Woche.

Persönlich
Viel passiert ist nichts. Außer der Geburtstag meiner zwei Lieben Charly und Loona. 13 Jahre schon auf der Welt und in unserer Obhut (ok, dass sind noch 2 Monate hin).

Blog
Ich kämpfe immer noch mit meinen Domains. Jetzt bekomme ich schon Post von der Denic. Holy ist das ein Kampf.

Geek
Am Anfang der Woche bin ich auf dieses Video von TJ DeVries gestoßen. Er ist ja Maintainer von NeoVim.

Das hat mich so faszniert, dass ich angefangen habe einen eigenen Language Server für AutoHotKey zu schreiben und zwar in AutoHotKey selbst. Das Grundgerüst steht und ich kann mit NeoVim kommunizieren. Jetzt werde ich die Funktionen nach und nach implementieren. Mal sehen wie lange ich das verwirkliche. Hier könnt ihr es in naher Zukunft einsehen.

Geglotzt
Bei Brooklyn Nine-Nine bin ich jetzt bei Staffel 1 durch.

Von The Bear haben wir noch 2 weitere Folgen geschaut. Recht nett, aber so richtig fesseln tut es (noch?) nicht.

Ich bin jetzt wieder auf What We Do in the Shadows umgestiegen und habe Staffel 3 begonnen.

Am Mittwoch lief gar nichts im TV und ich habe deshalb in die Neuauflage mit von In 80 Tagen um die Welt mit David Tennant geschalten und was soll ich sagen. Die ersten 3 Teile waren nicht schlecht und ich habe den Rest gleich auf den Videorekorder gebannt. Ein paar interessante Änderungen am Stoff und schon ist wieder Schwung drin.

Vorgestern und Gestern haben wir, nach eine Empfehlung Simon Becketts Die Chemie des Todes Staffel 1 in der ARD Mediathek durchgebinged. Wir mögen dies Art von Unterhaltung und sind deswegen hängen geblieben.

Mitte der Woche wurde der Trailer zu Bad Boys: Ride or Die veröffentlicht. Und der macht richtig Spaß. Und da ich Bad Boys for Life noch nicht gesehen hatte, habe ich den gleich nachgeholt. Und der war echt gut. Ein bisschen zu viel "mimimi, keine Gewalt und wir müssen in den Ruhestand", aber das kann man verkraften.

Rückblick
Logbuch KW13 2023

Jedi Tricks – S-Verweis in VIM

Ich bin immer wieder erstaunt, was mit vim alles möglich ist. Auch wenn es mir unter Windows nicht ganz so fluffig von der Hand läuft wie Notepad++, so gibt es einfach Aufgaben, die einfach nicht anders machbar sind. Heute war wieder so ein AHA-Moment.
Folgenden Situation. Die erste Datei ist eine XML Datei die mittendrin mehreren Dutzend Datenzeilen hat, mit folgender Struktur (nur mir noch mehr "Feldern").

<id="00001" name="Viserys" alter="100">
<id="00002" name="Daemon" alter="100">
<id="00003" name="Rhaenyra" alter="100">
<id="00004" name="Alicent" alter="100">

Wie man sehen kann haben alle das Alter von 100.
Die zweite Datei kam aus einer Datenbank schön als CSV. Nach dem Löschen von unnötigen Spalten hatte ich folgendes:

26,0003
40,0002
26,0004
60,0001

Wie bekommt man jetzt das richtige Alter in das Feld in die XML ohne die Struktur der Datenzeilen und der gesamten XML zu zerstören?
Früher hätte ich alles irgendwie ins Excel gebracht, mit S-Verweis herumgedoktort, dann in Notepad++ die, dann Tab getrennten Einträge aus Excel, bereinigt und am Ende alle anderen Daten vor und nach den Einträgen per Copy&Paste wieder rangetackert.

Ein Python Skript zu schreiben war mir zu aufwändig, denn es waren insgesamt keine hundert Einträge. Da einen kompletten Parser zu bauen... Nein.

Mir kam die Idee das mit vim Makros zu lösen aber es sind ja zwei Dateien. Und dann kam mir die Idee, was ist wenn das Makro auch mehrer Tabs in vim steuern kann? Und nach einem kurzen Test hatte ich die Bestätigung, es geht. Also beide Dateien in vim in separaten Tabs öffnen und folgendes als Makro gespeichert.

- Sprung an den Anfang der Zeile
0
- Suche Eintrag id
[ESC]:/id[Return]
- Zwei Worte vorwärts und alles in den Anführungszeichen in den Zwischenspeicher lesen
2wvi"y
- In den Tab wechseln zu der Datei (das kann unterschiedlich bei jedem sein wegen der Reihenfolger der Tabs)
[STRG]+h
- Suche nach Eintrag aus dem Zwischenspeicher
[ESC]/[STRG]+r"[Return]
Damit ist man in der entsprechenden Zeile. Das ist der S-Verweis =)
- An den Anfang springen und das Alter in den Zwischenspeicher kopieren
[ESC]0yw
- Zurück in die XML Datei
[STRG]+l
- Den Eintrag "alter" suchen
[ESC]/alter[Return]
- Zwei Wörter vorwärts alles in Anführungszeichen markieren und durch den Inhalt des Zwischenspeicher ersetzen
2wvi"p
- Und damit man mit der nächsten Zeile weitermachen kann enden die Makros eigentlich fast immer mit "runter" und an den Anfang der Zeile
[ESC]j0

Und das war's. An drei Zeilen getestet und als gut befunden. Und dann mit
100@a[Return]
der Magie zugeschaut wie es blitzt und blinkt und alles wie gewünscht aufgeräumt wird. Klar muss man aufpassen das nicht weitere "id" Einträge irgendwo sind (mein Feldnamen war eindeutiger).
Man kann es aber auch Zeile für Zeile ausführen und trotzdem einen haufen Zeit sparen.

Vim Makros sind das Beste.