User Tools

Site Tools


viki:beispiele

This is an old revision of the document!


Ein Mercurial-Log zerlegen

Ich möchte die Ausgabe von hg log zerlegen, so dass der Logeintrag jeder Revision in eine Datei geschrieben wird, deren Dateiname die Revisionsnummer aus dem Log ist.

Ein Beispiel für die Ausgabe von hg log:

changeset:   66:efc0519aae42
user:        solar
date:        Mon Nov 21 18:04:55 2005 +0000
files:       functions/string/strncpy.c
description:
Added test driver, fixed off-by-one bug.


changeset:   65:1b840d800436
user:        solar
date:        Sun Nov 20 17:25:25 2005 +0000
files:       functions/string/memset.c
description:
Added test driver.

Mit dem Cursor in der ersten Spalte der ersten Zeile:

  • qqq um das Makro 'q' zu leeren.
  • qq um das Makro 'q' aufzunehmen.
  • W um zum Anfang des nächsten WORTS zu springen (hier: die 6 von 65:1b840d800436).
  • <Strg>-v für zeichenweise visuelle Selektion.
  • /:<Eingabe> um zum Doppelpunkt zu springen.
  • h um ein Zeichen zurück zu gehen.
  • y um die Selektion in den Zwischenspeicher zu holen.
  • 0 um zum Zeilenanfang zurück zu springen. (Nicht wirklich notwendig, aber…)
  • <Umschalt>-v für zeilenweise visuelle Selektion.
  • /^changeset:<Eingabe> um zur nächsten Zeile zu springen, die mit changeset: anfängt. (Damit sind aber die zwei Leerzeilen mit markiert…)
  • ?^[^\n]<Eingabe> um rückwärts zur ersten Zeile zu springen, die nicht leer ist.
  • : um auf die Selektion einen Befehl auszuführen.
  • w für “write”, das Schreiben des Bereichs in eine Datei.
  • <Strg>-r“<Eingabe> um den Inhalt des Zwischenspeichers auf die Kommandozeile zu schreiben.
  • /^changeset:<Eingabe> um zur nächsten Zeile zu springen, die mit changeset: anfängt.
  • @q um das Makro 'q' rekursiv aufzurufen.
  • q um das Aufzeichnen des Makro 'q' zu beenden.
  • @q um das Makro 'q' auszuführen.

HTML-Auszeichnung für Unicode Charakternamen

In einem umfangreichen HTML-Dokument stehen Unicode-Charakternamen der folgenden Form:

Das Zeichen U+00A0 no-break space sollte im Allgemeinen...

Der Charaktername (hier: “no-break space”) soll durch ein <span>-Element in Kapitälchen gesetzt werden. Allerdings gibt es in dem Dokument tausende unterschiedlicher Charakternamen unterschiedlicher Längen. Manchmal steht zwischen dem Code Point (hier: U+00A0) und dem Charakternamen noch das entsprechende Zeichen; dieses soll nicht mit in das <span>-Element.

Hier war jede Menge Handarbeit gefragt, und ich wollte die Aufgabe mit so wenig Tastenanschlägen wie möglich erledigen. Also habe ich mir zwei Makros und fünf Tastaturmappings angelegt.

Die beiden Makros, ausgehend von einer Cursorposition auf dem letzten Buchstaben des Charakternamens, zum Einfassen mit dem gewünschen HTML-Element, wobei das w-Makro das erste Element nach dem Code Point (das Zeichen selbst) ausläßt:

  • qqqqqa</span>, <Esc>, NWi<span class=“uname”>, <Esc>, /U+[0-9A-F]\{4,6\}, <Eingabe>, Weq
  • qwqqwa</span>, <Esc>, N2Wi<span class=“uname”>, <Esc>, /U+[0-9A-F]\{4,6\}, <Eingabe>, Weq

Dann vier Tastaturbelegungen um das Ganze dann einfach durchführen zu können:

  • :map <F2> @q
  • :map <F3> @w
  • :map <F6> e (an das Ende des nächsten Worts springen – e statt E, weil am Ende des Charakternamens z.B. auch ein Komma stehen kann)
  • :map <F7> bbe (zwei Worte zurück und dann zum Ende – ein “Rückgängig” für ein F6 zuviel)
  • :map <F8> nWe (zum Ende des ersten Wortes nach dem nächsten Code Point springen)
viki/beispiele.1536589296.txt.gz · Last modified: 2018/09/10 16:21 by 127.0.0.1