ENGLISH

@(#) Feb 22 2014, 20:31:15

Das ist die Webseite zum Buch

Reinhard Wobst, "vim ge-packt" (mitp Verlag Bonn 2004, ISBN 3-8266-1425-9)

über den vi-Nachfolger vim, einem sehr leistungsfähigen Editor, der unter verschiedensten Betriebssystemen läuft.

Sie finden hier alle mit einem entsprechenden Hinweis im Buch versehen Shell- und vim-Skripte zum Download:

Zip-Archiv (etwa 32 KB)

Außerdem werden Sie hier alle aktuellen Ergänzungen und Fehler finden. Ich freue mich immer über Rückmeldungen und werde auch versuchen, so schnell wie möglich darauf zu reagieren (die Antwortzeiten sind bei der heutigen Belastung leider nicht voraussagbar). Als Schutz gegen versehentliches Löschen unter dem Motto "wieder mal Unmassen von Spam heute" empfiehlt es sich, ein Subject wie "vim-Buch" o.ä. zu wählen :-)

Meine Mailadresse (hoffentlich noch lange gültig):

r.wobst+@+gmx.+de

(die "+"-Zeichen gehören natürlich nicht dazu, sondern sind ein Schutz gegen Spam-Robots).

Fehler und Ergänzungen zur 4. Auflage

Das in 7.4.3 (S.320) erwähnte Skript gpgvi.py lag versehentlich nicht bei. Im neuen Zip-Archiv können Sie es finden, und eventuelle Änderungen sowie die Dokumentation nebst Sicherheitsdiskussion finden Sie (nebst anderer freier Software) auch unter

https://bitbucket.org/ReinhardW

S. 214:

Wie mich ein Leser freundlicherweise darauf hinwies, ist es besser, im Skript mkfliess.vim an die "normal"-Befehle mit ein Ausrufezeichen "!" anzuhängen, damit eventuelle Tastaturmappings nicht irritieren. Im Release 1.5 des zip-Archivs ist die Korrektur bereits vorgenommen.

Fehler und Ergänzungen zur 3. Auflage

S. 269o:

Es muss natürlich ":highlight" heißen und nicht ":hilight".

Fehler und Ergänzungen zur 2. Auflage

S.74: Beim Kommando "S" streichen: "von Cursorposition bis Zeilenende"

Fehler und Ergänzungen zur 1. Auflage

S.14 (Vorwort)

Aus unerfindlichen Gründen benannte ich Herrn Mario Lorenz in Mario Lanze um. Sorry, das ist mir peinlich - er hat wirklich sehr aufmerksam korrigiert und kritisiert ...

S.14 und 17: "Molenaar"

Dort muss es natürlich "Moolenaar" heißen.

Option "fileformat"

Eine wichtige Option hätte ich vielleicht erwähnen sollen: 'fileformat' oder kurz 'ff'. Damit werden Sie das Problem der unterschiedlichen Zeilenende-Zeichen unter UNIX, DOS/Windows und Mac los. Endet jede Zeile einer gelesenen Datei auf '\n', so wird das Dateiformat automatisch 'unix'; bei '\r\n' wird 'dos' angenommen, und bei nur mit '\r' abgeschlossenen Zeilen 'mac'. Wenn das Dateiformat vom Standard auf Ihrem Rechner abweicht, wird es angezeigt.

Wenn Sie eine UNIX/Linux-Datei an Windows-Only-Nutzer weiterreichen wollen, dann geben Sie vor dem Abspeichern ":set ff=dos". Analog können Sie DOS-Dateien nach UNIX konvertieren: ":set ff=unix" (doch meistens stört das DOS-Format nicht unter UNIX, nur die Notepad-Nutzer unter Windows sehen UNIX-Dateien als eine einzige Zeile).

Printed quotable lesen

Aus den verschiedensten Gründen hat man manchmal einen Text als "quoted printable" vorliegen. Das ist eine spezielle Codierung, mit der u.a. Umlaute dargestellt werden können; sie sieht z.B. wie folgt aus:

Im R=FCckblick wars eine sehr sch=F6ne =

Intern werden viele Mails so codiert, aber oft genug schneidet jemand mit der Maus solch ein Textstück aus und speichert es irgendwo ab, und das große Wundern beginnt. Manche Microsoft-Mailer codieren sinnigerweise HTML zusätzlich als 'quoted printable' - dabei kann HTML doch schon alles selbst und portabel codieren. Es kann durchaus sein, dass Ihr Browser dann Schrott oder gar nichts anzeigt.

Die Antwort kann lauten: "vim + Python". Es gibt zwar einen fertigen Python-Modul 'quopri', der Codierung und Decodierung ganz einfach macht, aber er kann in diesem Kontext keine Zeilen aneinanderhängen (daran kranken auch alle Alternativen, die mir zugesendet wurden) - gerade das ist aber oft wichtig bei dieser Codierung.

So entstand meine erste sinnvolle Anwendung für den in vim optional eingebetteten Python-Interpreter (evtl. müssen Sie dazu vim selbst übersetzen, falls es kein fertiges Paket für Ihr System gibt). Das Skript liegt als "printed_quotable.vim" im Archiv und ist erstaunlich einfach (es zeigt sehr gut die Leistungsfähigkeit der Sprache bei der Listenverarbeitung).

Speichern Sie es z.B. unter diesem Namen in $HOME/.vim/plugin ab. Damit der Python-Interpreter nicht bei jedem vim-Start geladen wird, definierte ich nur die lokale Funktion pq(), die erst auf Anforderung (F12) den Python-Interpreter samt benötigten Modulen lädt.

Nutzung: Drücken Sie F12, wenn Sie das Feature nutzen wollen. Zunächst passiert nichts (bis auf eine Meldung), das Feature wird nur initialisiert. Dann markieren Sie den Bereich, den Sie betrachten wollen, im visuellen Modus (Cursor auf Anfang setzen, `V`, mit Cursor auf Ende fahren). Nun nochmals F12 drücken - fertig. Konvertierte Bereiche können Sie auch abspeichern. Den Zyklus "Markieren - F12 drücken" können Sie beliebig oft wiederholen.

GnuPG/PGP-Mails per Knopfdruck auspacken

Das Folgende mag extrem konservativ erscheinen: Wer mit PGP bzw. GnuPG (GPG) verschlüsselte Mails empfängt, lässt die Dechiffrierung normalerweise von seinem Mailer erledigen (kmail, mutt, enigma ...). In der Praxis gibt es jedoch unzählige Probleme und Problemchen. Mancher sendet sog. Inline-PGP, andere PGP/MIME; kmail speichert die Mails nur chiffriert ab, so dass man darin nicht suchen kann; bei remoter Arbeit im Textmodus hat man vielleicht nur Pine zur Verfügung ... es kommt immer wieder Freude auf (vgl. auch den Artikel "Vorwiegend sonnig" in der iX 3/2004, S.126-131).

Das Einfachste, nur scheinbar Umständlichste ist, die Mail erst einmal als Datei abzuspeichern und dann zu dechiffrieren (dazu reicht "gpg dateiname " aus). Allerdings wird die Datei dabei umbenannt. Oft hat man noch mit einer Codierung wie quoted_printable zu kämpfen, und als besonderer Spaß erschien einmal die Fehlermeldung: "gpg: No valid OpenPGP data found" - Punkt. Nach langem Hin und Her zeigte sich, dass der Mailer des Absenders ein Leerzeichen an die Zeile "--- BEGIN PGP MESSAGE ---" angehängt hatte, womit nur neuere gpg-Versionen klar kommen. Als diese Hürde überwunden war (und quoted_printable decodiert), erschienen hässliche "^M"-Zeichen am Zeilenende - es war eine Mail im DOS-Format.

An dieser Stelle wurde es mir der Handarbeit zu viel, und ich schrieb ein kleines Plugin gpg.vim (das wie üblich in $HOME/.vim/plugin unterzubringen ist). Es erfordert das kleine Python-Skript quopriconv (das mit oben beschriebenen fast identisch ist). Bringen Sie dieses in einem bin-Verzeichnis unter.

Nutzung:

Laden Sie die chiffrierte Mail in dem vim. Nach einem Druck auf die Funktionstaste F7 wird die Passphrase angefordert und der chiffrierte Teil ersetzt. Das oben beschriebene Leerzeichen wird, falls vorhanden, vorher entfernt, quoted_printable wird decodiert (sofern nötig), und eventuelle "^M"'s am Zeilenende verschwinden. Nach dieser Operation müssen Sie manchmal noch ^L drücken, um gpg-Ausschriften verschwinden zu lassen (von denen vim nichts weiß).

Manche Mail ist auch UTF-8-codiert (also im Unicode). In diesem Fall drücken sie NACH der Dechiffrierung (also dem Druck auf F7) noch F6, um sie in den ISO-Zeichensatz 8859-1 zu konvertieren. Nutzer von SuSE Linux ab 9.1 werden das umgekehrte Problem haben, weil sie standardmäßig mit Unicode arbeiten - dann ändern sie in der Funktion utf() die eine Zeile in

'a,'b !recode ISO-8859-1..UTF8

Das Skript finden Sie im Archiv. Mit diesem Skript lebe ich inzwischen wesentlich sorgenfreier als mit allen Mailer-Gimmicks. Ich muss dabei an den Spruch denken:

Die Arche wurde von einem Amateur gebaut,
die Profis brachten uns die Titanic.

vim selbst übersetzen

Wenn man vim mit gcc3.3 übersetzt, dabei "features=big" wählt und den Compilerschalter "-O3" setzt, gerät vim bei einer bestimmten Datei durch das Kommando "G" in eine Endlosschleife (nicht aber, wenn man seitenweise vorwärts blättert).

Es handelt sich offenbar um einen Compilerfehler, der aber kaum zu lokalisieren ist (die zugehörige Quelle "syntax.c" ist nicht gerade einfach).

Ausweg: Bei "features=big" nur den Schalter "-O2" angeben. Mit gcc2.95.3 (z.B. bei SuSE 8.x) gibt es keine Probleme.