Im Terminal kann ich e nicht in Kleinbuchstaben schreiben

14

Wenn ich ein Terminalfenster öffne und den Buchstaben "e" eingebe (natürlich ohne Anführungszeichen), ertönt ein Signalton und der Buchstabe wird nicht eingegeben. Jeder zweite Buchstabe funktioniert im Terminal einwandfrei. Großbuchstaben E funktioniert auch. Nur die Kleinschreibung e nicht.

In jeder anderen App auf meinem Computer funktioniert e ohne Probleme, es handelt sich also nicht um ein Tastaturproblem.

Dies begann irgendwann in der letzten Woche. Ich benutze Terminal viel in meinem Job und das war noch nie ein Problem. Ich habe neu gestartet (nicht behoben). Ich habe Terminal zurückgesetzt (nicht behoben).

Da ich das genaue Datum des Starts nicht kenne, bin ich mir nicht sicher, ob ich Änderungen vorgenommen oder Software installiert habe. Ich versuche, alles zu entfernen, was ich kürzlich installiert habe.

Zu Ihrer Information Ich habe versucht, iTerm2 von Drittanbietern zu verwenden, und es funktioniert genauso.

AUCH - wenn ich etwas mit einem niedrigeren e einfüge, macht es das gleiche - wird es nicht nehmen. Es muss ein Terminal-Bash-Konfigurationsproblem sein, denke ich.

Tatsächlich habe ich den folgenden Sinn kopiert und ihn dann in Terminal eingefügt. Was erscheint? sns und Sie können zwei Pieptöne hören.

Auch - falls es unklar ist - geschieht dies mit der im MBP eingebauten Tastatur sowie einer externen Tastatur. Basierend auf diesem und dem Einfügeproblem denke ich nicht, dass dies in irgendeiner Weise ein Problem mit der physischen Tastatur ist.

Technische Daten: 2015 MacBook Pro, voll auf dem neuesten Stand von OS X

user3720729
quelle
1
Bleibt das Verhalten bestehen, wenn Sie zu einer anderen Shell wie csh oder tcsh wechseln?
Kent
1
Das ist seltsam ... versuchen Sie es zu öffnen, applescriptindem Sie es im Rampenlicht suchen und delay 10dann die Eingabetaste drücken und tell application "System Events" to keystroke "e"genau so schreiben , wie es geschrieben wurde. Wenn die Wiedergabe gedrückt wird, wartet sie 10 Sekunden und drückt dann e von selbst. Gehen Sie vor Ablauf dieser Zeit zum Terminal und testen Sie es. Wenn dies nicht funktioniert, liegt ein ernstes internes Problem mit Ihrem Computer vor.
ALX
1
Was passiert, wenn Sie dort, cat filnam.txtwo die aufgerufene Datei filnam.txtASCII-Text enthält, mit e?
Techraf
Befindet sich dies nur in der Shell oder in einem Programm, das in Terminal ausgeführt wird?
Agentroadkill

Antworten:

7

Lassen Sie es uns debuggen.

  1. Wechseln Sie die Muscheln und versuchen Sie es erneut. (Gutschrift an @Kent) Im Terminal:
    • $(which zsh)
  2. Kommentieren Sie alle Zeilen in .bash_profile, .bashrcusw. , und öffnen Sie ein neues Terminal Tab / Fenster. Wenn dies das Problem behebt, verbraucht etwas, das in die Shell-Umgebung geladen wird, den Brief eaus Gründen, die die Wissenschaft möglicherweise nie erklären kann.
  3. Versuchen catSie, eine Datei mit dem Buchstaben ezu erstellen, um festzustellen, ob dieser überhaupt angezeigt wird: (Dank an @techraf)
    • Öffne einen Texteditor (nicht Terminal)
    • Gib einen Text mit ein paar es ein und speichere die Datei ( foo.txt?)
    • Im Terminal ist catdie Datei:
      • cd /path/to/folder; cat foo.txt
    • Wenn es rendert, kann das Terminal damit umgehen, wenn nicht, dann ist das super komisch.
  4. Versuchen Sie es mit Applescript. (Gutschrift an @ALX)

    • Öffnen Sie den Applescript-Editor
    • Erstellen Sie eine Applescript-Datei mit folgenden Inhalten:

      delay 10
      tell application "System Events" to keystroke "e"
    • Führen Sie die Skriptdatei aus und navigieren Sie schnell zum Terminalfenster. In ein paar Sekunden wird es praktisch die eTaste drücken und hoffentlich in Ihrem Terminal angezeigt. Dies würde darauf hinweisen, dass möglicherweise ein Problem mit dem Eingabe- / Gerätetreiber vorliegt (obwohl ich keine Ahnung habe, was das sein könnte).

Ich werde nicht lügen, ich bin absolut fasziniert von diesem Thema und kann es kaum erwarten zu erfahren, was die Ursache ist. Es ist keine Hardware, weil es in anderen Anwendungen funktioniert, was bedeutet, dass es Software ist, und ich kann mir nicht vorstellen, wer den Brief emit Code verschlucken würde .

Pierce
quelle
1
Besser versuchen , eine C - Shell zB tcsh , da es nicht (kann nicht) , um die Bash - Startdateien lesen oder auch nur einen Dolmetscher zB Python starten auf Perl und geben dort
user151019
1
Ja, ich bin wirklich fasziniert von dieser Ausgabe
Manchineel
„Ich kann mir nicht vorstellen, das den Buchstaben e mit Code schlucken würde“ Dieser Kerl könnte etwas wissen ... upload.wikimedia.org/wikipedia/en/5/5e/Cisforcookie.jpg
Allan
3

Ich habe diesen Thread gerade gefunden, nachdem ich auf dasselbe Problem gestoßen bin.

.inputrc

Ich hatte 2 Zeilen in .inputrc, in einem Moment der nachlässigen Ignoranz hinzugefügt, beginnend mit eunds (die gültige Bash-Konfiguration, aber keine gültige Readline-Konfiguration sind). Sie scheinen als Tastenkürzel für die Readline-Anpassung interpretiert worden zu sein.

Das Entfernen der Linien von .inputrc, habe ich bestätigt, mein Problem gelöst.

Vielen Dank an @ user208052 für die entsprechende Erinnerung .inputrc.

Die Readline-Konfiguration der Shell

Der bindBefehl der Shell ermöglicht das Anzeigen und Ändern der Readline-Konfiguration. (Siehe help bind. helpIst manfür Shell-interne Befehle).

Ansicht bind -p(möglicherweise Pipe zu weniger |lessoder Weiterleitung zu einer Datei > binds.txt). Es listet Funktionen und Bindungen in einer Form auf, die als Eingabe wiederverwendet werden kann .

Es hat Einträge wie "c": self-insertfür jedes Zeichen im ASCII-Bereich, so dass die verkorkste Konfiguration möglicherweise durch self-inserteine andere Readline-Funktion ersetzt wird.

Es hat einige Edelsteine; Durch das Anzeigen wurde mir lediglich beigebracht, dass C-=( \e=) in meiner Standardkonfiguration mögliche Vervollständigungen ausgibt. Es scheint die vollständige aktuelle Konfiguration von Readline für Ihre Shell zu zeigen ... ziemlich nützlich und leistungsstark. Gut zum Erkunden.

End-to-End-Test

  1. e funktioniert
  2. füge eine fehlerhafte Zeile ein .inputrc, öffne eine neue Shell

    et completion-map-case on
    set completion-ignore-case on
  3. e ist anscheinend ein no-op

  4. bind -p( | grep -i '"E"') zeigt
    • "E": self-insert,
    • aber nein "e": self-insert
    • während "A": self-insertund "a": self-insertanwesend sind.
mcint
quelle
2

Ich bin etwas eingerostet, aber das Einfügen in Terminal funktioniert anders als das Einfügen in ein GUI-Programm: Jedes Zeichen wird als separater Tastenanschlag gesendet und nicht als Kopie aus der Zwischenablage in den App-Puffer. Wenn also das "e" neu zugeordnet wurde, wird es auch in der Paste neu zugeordnet.

Überprüfen Sie die folgenden Stellen:

System Preferences > Keyboard > Shortcuts

~/Library/KeyBindings/KeyBindings.dict

$ defaults read com.apple.Automator NSUserKeyEquivalents

Zencraft
quelle
Auf was genau prüfen?
Nohillside
Ob der eSchlüssel neu zugeordnet wurde.
Zencraft
1
Vorausgesetzt, dass der OP in solchen Dingen nicht allzu erfahren ist: Worauf sollten sie genau achten? Ein Beispiel für eine solche Zuordnung kann hilfreich sein.
Nohillside
1
Suchen Sie für Tastaturkürzel nach Tastenzuordnungen: Auf der linken Seite befindet sich eine App-Liste und auf der rechten Seite eine Shortcut-Liste. Stellen Sie sicher, dass Terminal nicht in der App-Liste enthalten ist. Die anderen beiden sollten leer sein; Wenn KeyBindings.dict vorhanden ist oder der Befehl defaults etwas zurückgibt, stellen Sie es hier zur weiteren Analyse bereit.
Zencraft
1

Sie können auch versuchen, das Terminal so einzustellen, dass beim Öffnen eines neuen Fensters ein Texteditor (emacs, vi usw.) geöffnet wird. Beispielsweise können Sie in den Terminal-Einstellungen für "Shell" den Befehl Ausführen wie z /usr/bin/emacs. Wenn Sie nicht ein den Einstellungsbereich eintreten können , passiert etwas noch Seltsameres als das, was bisher vorgeschlagen wurde ...

Wenn ein neues Terminal-Fenster geöffnet wird, sollte der Emacs starten, und Sie können versuchen, auf eusw. zu drücken . Ich habe keine Ahnung, was passieren wird, aber wie oben bei @Pierce bin ich gespannt, was möglicherweise vor sich geht.

Kent
quelle
0

Überprüfen Sie die Stty-Einstellung und stellen Sie sicher, dass "e" nicht versehentlich als Rücktaste oder Ähnliches festgelegt wurde. Kenne ich schon. Stty something \ e würde es tun Die Empfehlung, .bash * zu deaktivieren / auskommentieren, würde es wahrscheinlich auch aufdecken.

Daryl Monge
quelle
0

Ich hatte das gleiche Problem, das durch einen Tippfehler verursacht wurde /etc/inputrc:

et output-meta on

Anstatt von

set output-meta on
fikovnik
quelle
-1

Löschen Sie einfach die .inputrc-Datei, sie befindet sich im Stammverzeichnis. (Es ist eine versteckte Datei).

user208052
quelle