next up previous contents index
Next: Interpretation der Kommandozeile Up: bash Previous: Der Kommandozeilenspeicher (history)

Anpassung des Kommandozeileneditors

  Der Kommandozeileneditor der bash benutzt die GNU- readline  Bibliotheksfunktionen. Wie bereits gesagt, bietet readline zwei Standardbelegungen an, zwischen denen Sie mit dem set-Shellkommando (-> Seite gif) hin und her schalten können.

Die Zuordnung von Tastenkombinationen zu bestimmten Editorfunktionen kann aber noch weiter Ihren speziellen Bedürfnissen angepaßt werden. Sie können jede Editorfunktion mit einer frei wählbaren Tastenkombination verknüpfen. Diese Um- bzw. Neubelegung der Tasten kann zur Laufzeit mit dem bind-Shellkommando (-> Seite gif) durchgeführt werden. 

Das Format einer Tastaturbelegung sieht folgendermaßen aus:

Taste : Kommandobezeichnung

Die Kommandobezeichnungen sind in Klammern hinter den Beschreibungen der Editorfunktionen auf den vorhergehenden Seiten angegeben.

Für die Tastenkombinationen können die Konstruktionen `\ C-' für die Kombination mit CONTROL und `\ e-' oder `\ M-' für die Metakombinationen mit ESC oder ALT verwendet werden. Außerdem können die folgenden Tasten benannt werden:

RUBOUT für Backspace
DEL für Delete
ESC für Escape
SPACE oder SPC für Leerzeichen
RETURN, RET, NEWLINE oder LFD für Zeilenende
TAB für Tabulator

Wenn Sie z. B. anstelle des aufwendigen set-Kommandos die Tastenkombination CONTROL -x v zum Umschalten in den vi-Modus und die Kombination CONTROL -x e zum Zurückschalten in den EMACS-Modus verwenden wollen, erreichen Sie das mit den folgenden Kommandos:

$ bind -m emacs '"\C-xv":vi-editing-mode'
$ bind -m vi '"\C-xe":emacs-editing-mode'
$ bind -m vi-insert '"\C-xe":emacs-editing-mode'
$ _

Neben den Editorkommandos können auch Zeichenketten und Kommandokombinationen (Makros) auf bestimmte Tasten gelegt werden.

Beispielsweise können Sie mit dem folgenden Kommando ein Makro zum Editieren der PATH-Variablen im emacs-Modus installieren:

$ bind -m emacs '"\C-xp":"PATH=${PATH}\e\C-e\C-a\ef\C-f''
$ _

  

Es ist auch möglich, eine neue Tastaturbelegung dauerhaft einzurichten, indem die Zuordnung von Kommandos und Tastenkombinationen in einer Datei abgespeichert wird.gif

Den Namen dieser Datei können Sie in der Shellvariablen INPUTRC festlegen. Wenn diese Variable nicht existiert, wird die Belegung im Heimatverzeichnis aus der Datei ~/.inputrc gelesen.

Für jede Umbelegung muß eine Zeile in der Datei eingetragen werden. Format und Inhalt der Zeilen stimmen mit dem oben für bind beschriebenen überein.

Zusätzlich können zur Anpassung von readline einige Schalter gesetzt und Variable belegt werden. Sie werden in der Form

set Schalter Wert

in der .inputrc-Datei eingetragen. Die Schalter können auch mit dem bind-Kommando benutzt werden. Die Werte in Klammern stellen die Voreinstellung dar.

horizontal-scroll-mode
(Off) Wird dieser Schalter auf ``On'' gesetzt, so wird beim Schreiben der Kommandozeile über den rechten Bildschirmrand hinaus die Zeile nach links verschoben, ansonsten wird sie umgebrochen.
editing-mode
(emacs) Durch Belegen dieser Variablen mit ``vi'' wird die vi-Tastaturbelegung eingeschaltet. Einzige Alternative ist der voreingestellte emacs-Modus.
mark-modified-lines
(Off) Wird dieser Schalter ``On'' gesetzt, werden alle Zeilen in der history mit einem Asterisk `*' gekennzeichnet, die im Editor verändert wurden.

bell-style
(audible) regelt das Verhalten von readline, wenn dem Benutzer ein Signal gegeben werden soll. Außer audible sind none und visible möglich.
comment-begin
(`#') In dieser Variablen kann das Zeichen bestimmt werden, das durch das vi-comment-Kommando in die erste Spalte der Kommandozeile geschrieben wird. Durch das Nummernzeichen (Voreinstellung) wird die Ausführung der Zeile unterdrückt.
meta-flag
(Off) Wenn dieser Schalter ``On'' gesetzt wird, erlaubt die Shell die Eingabe von 8-Bit-Zeichen (zum Beispiel Umlaute) auf der Kommandozeile.
convert-meta
(On) Bleibt dieser Schalter gesetzt, werden Zeichen mit gesetztem achten Bit zu einer ESC-Sequenz mit dem entsprechenden ASCII-Zeichen verarbeitet.
output-meta
(Off) Wenn dieser Schalter ``On'' gesetzt wird, zeigt die bash auf der Kommandozeile 8-Bit-Zeichen an.
completion-query-items
(100) In dieser Variablen kann eine Anzahl bestimmt werden, bis zu der mögliche Erweiterungen ohne Nachfrage angezeigt werden. 
show-all-if-ambigous
(Off) Die Veränderung dieses Schalters auf ``On'' veranlaßt readline, bei Komplettierungsversuchen mit mehreren Möglichkeiten sofort alle Varianten anzuzeigen, anstatt ein Signal zu geben.
expand-tilde
(Off) Wenn der Schalter eingeschaltet wird, führt readline eine Tildenerweiterung bereits beim Versuch einer Kommandozeilenkomplettierung aus.

Bedingte Ausführung von .inputrc

Ähnlich wie beim C-Präprozessor können Teile der .inputrc-Datei durch die Direktiven $if, $else und $endif eingeschlossen werden, um diese Einstellungen nur unter bestimmten Bedingungen auszuführen. Folgende Tests sind vorgesehen:

$if term= Terminal
testet auf die Übereinstimmung mit der TERM-Umgebungsvariablen.
$if bash
leitet den Teil von .inputrc ein, der speziell für die bash bestimmt ist. Andere Programme, die mit der readline-Library arbeiten, werden mit der selben .inputrc-Datei initialisiert.
$if mode= Modus
ermöglicht die Unterscheidung der verschiedenen Editiermodi: emacs, emacs-meta, emacs-ctlx, vi, vi-move und vi-insert.

Beispiel:

$if Bash
        # Umlaute in der Kommandozeile erlauben:
        set convert-meta Off
        set meta-flag On
        set output-meta On
        $if term=xterm
        # Spezielle Einstellungen fuer xterm
        $else
        # Einstellungen fuer alle anderen Terminals
        $endif
        $if mode=vi
        # Tastaturbelegung im vi-Modus
        $endif
        $if mode=emacs
        # Tastaturbelegung im emacs-Modus
        $endif
$endif

Eine ausführliche TeX info-Beschreibung aller readline-Funktionen kann mit dem info-Kommando nachgelesen werden.

Die aktuelle Tastaturbelegung wird mit dem Kommando ` bind -v' ausgegeben (-> bind auf Seite gif).

 

Der erweiterte Editor: sekundärer Prompt

  Viele Operationen der Shell werden mit bestimmten Symbolen eingeleitet und müssen mit weiteren Symbolen abgeschlossen werden. Beispielsweise muß eine for-Schleife durch ein done abgeschlossen werden, eine (-Klammer durch eine ), eine mit Anführungszeichen begonnene Zeichenkette muß mit Anführungszeichen abgeschlossen werden und so weiter ...

Die Shell unterstützt die Eingabe solcher Kommandos, indem sie nach einem Zeilenende in einer unvollständigen Kommandozeile eine neue Eingabeaufforderung -- in der Regel ein > -- ausgibt, bis der erwartete Abschluß des begonnenen Kommandos eingegeben ist. Die so eingegebenen Teile werden zusammen als eine Kommandozeile interpretiert.

Wenn die Shellvariable command_oriented_history gesetzt ist, wird ein aus mehreren Zeilen bestehendes Kommando als ein einziger Eintrag im History-Speicher behandelt.



next up previous contents index
Next: Interpretation der Kommandozeile Up: bash Previous: Der Kommandozeilenspeicher (history)



Linux Anwenderhandbuch -- Copyright 1993, 1994, 1995 S. Hetze, D. Hohndel, O. Kirch, M. Müller