Vorkompilierte Kommandozeilen-Eingabe in zsh

Vorkompilierte Kommandozeilen-Eingabe in zsh

Ich habe vor kurzem eine Ubuntu 12.04 64-Bit-Maschine eingerichtet. Ich verwendetmuxmit vielen offenen Fenstern, alle nutzenzshals Schale, einige von ihnen durch einechrootUmgebung, die denselben Home-Ordner wie die normale Umgebung verwendet.

Nachdem ich einige Zeit zufällige Befehle in den Shells ausgeführt habe (alle Arten, aber hauptsächlich Dateioperationen, vi, Build/Make-Befehle innerhalb und außerhalb der Chroot-Umgebung), zeigt jede Shell sofort einige vorkompilierte Befehle aus dem vorherigen Verlauf an, die ich entfernen muss, z. B. mit Strg+Q, bevor ich etwas eingeben oder meinen vorherigen Verlauf durchsuchen kann.

Besonders ärgerlich ist, dass ich, wenn ich versehentlich irgendwelche Zeichen am Anfang des vorkompilierten Befehls eingebe, dann die Zeile lösche und meinen eigenen Befehl eingebe, bei der nächsten Eingabeaufforderung auch diese zusätzlichen Zeichen erhalte. Diese geänderte Eingabe wird dann immer größer, ohne jemals in der zsh-Verlaufsdatei aufzutauchen.

Wenn ich die Datei .zsh_history lösche oder eine neue Shell erstelle, ist das Problem für sehr kurze Zeit gelöst, kommt aber nach kurzer Zeit (einige Minuten Verwendung der Shell) unaufhaltsam wieder und heimsucht mich.

Dies ist ein Beispiel dafür, wie meine Eingabeaufforderung nach einiger Zeit aussieht, wenn ich gerade von meinem vorherigen Befehl zur Shell zurückgekehrt bin:

[10:59:14] user:Build git:(master*) $ schroot -c full32 -- antls -l

Beachten Sie, dass die Eingabeaufforderung offensichtlich mit „$“ enden sollte. Was folgt, antist irgendein Müll, den ich versehentlich eingegeben habe, bevor ich die Zeile zuvor mit Strg+Q gelöscht habe.

Für den Kontext verwende ichoh mein Gottmit demgeoffgarsideThema und diegitfastPlugin. Für chroot verwende ichschrootmit folgender Konfiguration:

[precise-full32]
description=Full 32bits dev environment
aliases=full32
type=directory
directory=/opt/chroot/full32
users=user
root-groups=root
personality=linux
preserve-environment=true

Ich bin mit meinem Latein am Ende und konnte weder hier noch anderswo ein Problem wie das beschriebene finden. Irgendeine Ahnung, was dieses nervige Verhalten verursachen könnte?

Antwort1

Ich nehme an, Sie verwenden die Emacs-Tastenbelegung (via d'oh-my-zshoder eine benutzerdefinierte Konfiguration)... bitte überprüfen Sie mit

$ bindkey | grep '\^Q'
"^Q" push-line

Und dann... push-lineist das Widget genau für den Zweck konzipiert, den Sie als lästig beschreiben: Ich gebe einen langen Befehl ein - aber ich habe einen Schritt vergessen... also beginne ich push-lineüber CTRL-Q, ich bekomme eine neue Eingabeaufforderung, mache es gut und danachIch erhalte meinen zuvor eingegebenen (aber noch nicht ausgeführten) Befehl zurück:

$ `cp /something/foo/bar to/another/long/path`  # to/another/long/path does not exist
[CTRL-Q]
$ mkdir to/another/long/path
[ENTER]
$ `cp /something/foo/bar to/another/long/path`  # appears again and I can execute it via [ENTER] without retyping

Also, lange Rede, kurzer Sinn:

Verwenden Sie entweder CTRL-Udie Standardbindung kill-whole-lineoder definieren Sie sie neu CTRL-Q, wenn Sie an diese Verknüpfung gewöhnt sind:

$ bindkey '^Q' kill-whole-line

verwandte Informationen