Unterabschnitte


A. Interaktive Eingabe-Editierung und -Ergänzung

Einige Versionen des Python-Interpreters unterstützen das Editieren der aktuellen Eingabezeile und einen Ergänzungs-Mechanismus ähnlich dem der Korn- und GNU Bash-Shell. Dies ist unter Verwendung der GNU Readline-Bibliothek implementiert, die Emacs- und vi-ähnliches Editieren unterstützt. Diese Bibliothek hat ihre eigene Dokumentation, die ich hier nicht duplizieren werde. Die Grundlagen jedoch sind einfach erklärt. Das hier beschriebene interaktive Editieren und der Ergänzungs-Mechanismus sind optional unter Unix und CygWin-Versionen des Interpreters verfügbar.

Dieses Kapitel dokumentiert nicht die Edititiermöglickeiten von Mark Hammonds PythonWin-Paket oder der Tk-basierten Umgebung IDLE, die mit Python verteilt wird. Die Kommandozeilenwiederholung, die in einem DOS-Terminal unter NT und einigen anderen DOS- und Windows-Varianten läuft, ist noch ein weiteres Biest.


A.1 Zeilen-Editierung

Falls unterstützt, ist die Eingabezeilen-Editierung immer dann aktiv, wenn der Interpreter einen primären oder sekundären Prompt ausgibt. Die aktuelle Zeile kann unter Verwendung der üblichen Steuerzeichen des Emacs-Editors editiert werden. Die wichtigsten davon sind: C-A (Control-A) bewegt den Zeiger an den Zeilenanfang, C-E ans Ende, C-B bewegt ihn eine Stelle nach links, C-F nach rechts. Die Rückschrittaste löscht Zeichen links vom Zeiger, C-D das Zeichen rechts davon. C-K löscht den Rest der Zeile rechts vom Zeiger, C-Y fügt den zuletzt gelöschten Teil wieder ein. C-Unterstrich macht die letzte Änderung rückgängig und kann mehrfach angewendet werden.


A.2 Zeilenwiederholung

Zeilenwiederholung funktioniert wie folgt. Alle nicht-leeren eingegebenen Zeilen werden in einem Puffer gespeichert und wenn ein neuer Prompt ausgegeben wird, befindet man sich auf einer neuen Zeile am unteren Ende dieses Puffers. C-P bewegt sich eine Zeile im Puffer nach oben (zurück), C-N eine nach unten. Jede Zeile im Puffer kann editiert werden. Ein Sternchen taucht vor dem Prompt auf, um zu markieren, daß eine Zeile modifiziert wurde. Beim Drücken der Eingabetaste wird die aktuelle Zeile an den Interpreter übergeben. C-R startet eine inkrementelle Rückwärtssuche, C-S startet eine Vorwärtssuche.


A.3 Tastenbelegungen

Die Tastenbelegungen und einige andere Parameter der Readline-Bibliothek können angepaßt werden, indem Kommandos in einer Initialisierungs-Datei namens $HOME/.inputrc plaziert werden. Tastenbelegungen haben die Form:


key-name: function-name

oder


"string": function-name

und Optionen können gesetzt werden mit


set option-name value

Zum Beispiel:


# Ich bevorzuge vi-aehnliches Editieren:
set editing-mode vi
# Editiere Zeilen immer in einzelnen Zeilen:
set horizontal-scroll-mode On
# Belege einige Tasten neu:
Meta-h: backward-kill-word
"\C-u": universal-argument
"\C-x\C-r": re-read-init-file

Man beachte, daß die vor-eingestellte Belegung für TAB in Python die ist, einen Tabulator einzufügen, anstatt von Readlines standardmäßiger Dateinamenergänzungsfunktion. Wenn Sie darauf bestehen, können Sie das überschreiben, indem Sie


TAB: complete

in Ihrer $HOME/.inputrc-Datei setzen. (Natürlich macht es das einem schwer, eingerückte Fortsetzungszeilen einzugeben...)

Die automatische Ergänzung von Variablen- und Modulnamen ist optional verfügbar. Um sie im interaktiven Modus des Interpreters zu aktivieren, fügen Sie folgendes in Ihre $HOME/.pythonrc.py-Datei ein:


import rlcompleter, readline
readline.parse_and_bind('tab: complete')

Das belegt die TAB-Taste mit der Ergänzungsfunktion so, daß bei doppeltem Drücken der TAB-Taste Ergänzungen vorgeschlagen werden. Die Funktion schaut dabei in den Namen von Python-Anweisungen, den aktuellen lokalen Variablen und den verfügbaren Modulnamen nach. Für qualifizierte Ausdrücke wie z.B. string.a wird sie den Ausdruck bis zum letzten "." auswerten und dann Ergänzungen aus den Attributen des resultierenden Objektes vorschlagen. Man beachte, daß dabei Code in der Anwendung ausgeführt werden kann, falls ein Objekt mit einer __getattr__()-Methode Teil des Ausdrucks ist.


A.4 Bemerkungen

Diese Eigenschaften stellen einen enormen Schritt vorwärts dar, verglichen mit bisherigen Versionen des Interpreters, wenngleich einige Wünsche offen bleiben. Es wäre nett, wenn die richtige Einrückung auf Fortsetzungszeilen vorgeschlagen werden könnte (der Parser weiß, ob ein Einrückungs-Token als nächstes verlangt wird). Der Ergänzungsmechanismus könnte die Symboltabelle des Interpreters verwenden. Ein Kommando zur Überprüfung (oder sogar zum Vorschlagen) von passenden Klammern, Anführungszeichen, etc. wäre ebenfalls sehr hilfreich.


Send comments to python-docs@python.org.