W terminalu nie mogę wpisać małych liter e


14

Jeśli otworzę okno terminala i wpisuję literę „e” (oczywiście bez cudzysłowu), usłyszysz sygnał dźwiękowy i nie wpisze litery. Każda inna litera działa dobrze w terminalu. Wielkie litery E również działają. Tylko małe litery e nie.

W każdej innej aplikacji na moim komputerze małe litery e działają bez problemu, więc nie jest to problem z klawiaturą.

Zaczęło się to w ostatnim tygodniu. Często używam terminalu w pracy i nigdy nie było to problemem. Uruchomiłem ponownie (nie naprawiłem). Mam zresetowany terminal (nie naprawiłem).

Ponieważ nie znam dokładnej daty rozpoczęcia, nie jestem pewien, czy wprowadziłem jakieś zmiany lub zainstalowałem oprogramowanie. Próbuję usunąć wszystko, co ostatnio zainstalowałem.

Do Twojej wiadomości Próbowałem użyć iTerm2 innej firmy i robi to samo.

RÓWNIEŻ - jeśli wkleję coś o niższym e, robi to samo - nie weźmie tego. To chyba jakiś problem z konfiguracją terminala bash.

W rzeczywistości skopiowałem następujący sens, a następnie wkleiłem go w terminalu. Co się pojawia sns i słychać dwa sygnały dźwiękowe.

Ponadto - w przypadku niejasności - dzieje się tak zarówno z wbudowaną klawiaturą MBP, jak i zewnętrzną klawiaturą. Biorąc pod uwagę to i problem z wklejaniem, nie sądzę, że jest to w jakikolwiek sposób problem z klawiaturą fizyczną.

Specyfikacja: MacBook Pro 2015, w pełni aktualny OS X


1
Czy zachowanie się utrzymuje, jeśli przejdziesz do innej powłoki, takiej jak csh lub tcsh?
Kent

2
To dziwne ... spróbuj otworzyć applescript, wyszukując go w świetle reflektorów, a delay 10następnie wpisz, a następnie naciśnij klawisz Return i napisz tell application "System Events" to keystroke "e"dokładnie tak, jak napisano. Po naciśnięciu odtwarzanie zaczeka 10 sekund, a następnie samo e. Idź do terminalu przed upływem tego czasu i przetestuj go. Jeśli to nie zadziała, oznacza to, że masz poważny problem wewnętrzny z komputerem.
ALX

1
Co się stanie, jeśli cat filnam.txtplik, do którego wywoływany filnam.txtjest plik, zawiera tekst ASCII e?
techraf


Czy to tylko w powłoce lub w dowolnym programie uruchomionym w terminalu?
agentroadkill

Odpowiedzi:


7

Debugujmy to.

  1. Zmień muszle i spróbuj ponownie. (Kredyt na @Kent) W terminalu:
    • $(which zsh)
  2. Komentarz wszystkie linie .bash_profile, .bashrcitp i otworzyć nową kartę / okno terminala. Jeśli to rozwiąże problem, coś ładowanego do środowiska powłoki zużywa literę ez powodów, których nauka może nigdy nie być w stanie wyjaśnić.
  3. Spróbuj catwprowadzić plik zawierający literę, eaby zobaczyć, czy wyświetli się: (Kredyt @techraf)
    • Otwórz edytor tekstu (nie terminal)
    • Wpisz tekst za pomocą kilku esi zapisz plik ( foo.txt?)
    • W terminalu catplik:
      • cd /path/to/folder; cat foo.txt
    • Jeśli ejest renderowany, terminal może to obsłużyć, jeśli nie, to jest to bardzo dziwne.
  4. Wypróbuj AppleScript. (Kredyt na @ALX)

    • Otwórz edytor Applescript
    • Utwórz plik Applescript z następującą zawartością:

      delay 10
      tell application "System Events" to keystroke "e"
    • Uruchom plik skryptu, a następnie szybko przejdź do okna terminala. Za kilka sekund wirtualnie wciśnie eklawisz i, mam nadzieję, pojawi się w twoim terminalu. Oznaczałoby to, że mógł wystąpić problem ze sterownikiem wejścia / urządzenia (chociaż nie mam pojęcia, co to może być)

Nie zamierzam kłamać, jestem absolutnie zafascynowany tym problemem i nie mogę się doczekać, aby dowiedzieć się, co jest przyczyną. To nie jest sprzęt, ponieważ działa w innych aplikacjach, co oznacza, że ​​jest oprogramowaniem i nie wyobrażam sobie, kto mógłby połknąć literę ez kodem.


1
Lepiej wypróbować powłokę C, np. Tcsh, ponieważ nie będzie (nie mogła) odczytać plików startowych bash, a nawet po prostu uruchomić interpreter, np. Python na perlu i tam
wpisać

1
Tak, tak naprawdę jestem FASCYNOWANY przez ten problem
Manchineel

„Nie mogę sobie wyobrazić, kto połknąłby literę ez
Allan

4

Właśnie znalazłem ten wątek po napotkaniu tego samego problemu.

.inputrc

Miałem 2 wiersze .inputrc, dodane w chwili nieostrożnej ignorancji, zaczynając od eis (które są poprawną konfiguracją bash, ale nie poprawną konfiguracją readline). Wydaje się, że zostały one zinterpretowane jako aliasy skrótów dla dostosowania readline.

.inputrcPotwierdziłem, że usunięcie wierszy rozwiązało mój problem.

Dzięki @ user208052 za ​​odpowiednie przypomnienie do sprawdzenia .inputrc.

Konfiguracja Readline powłoki

Polecenie powłoki bindumożliwia przeglądanie i modyfikację konfiguracji Readline. (Patrz help bind, helpjest manpoleceń powłoki wewnętrzne).

Zobacz bind -p(może potokować do mniej |lesslub przekierować do pliku > binds.txt). To „listy [S] Funkcje i wiązania w formie, która może być ponownie wykorzystana jako wejście” .

Ma wpisy jak "c": self-insertdla każdego znaku w zakresie ASCII, więc zepsuta konfiguracja może zastąpić self-insertinną funkcją Readline.

Ma kilka klejnotów; przeglądanie go tylko nauczyło mnie, że C-=( \e=) drukuje możliwe uzupełnienia, w mojej domyślnej konfiguracji. Wygląda na to, że pokazuje pełną aktualną konfigurację Readline dla twojej powłoki ... całkiem przydatna i potężna. Dobry do odkrywania.

Test od końca do końca

  1. e Pracuje
  2. wstaw błędną linię .inputrc, otwórz nową powłokę

    et completion-map-case on
    set completion-ignore-case on
  3. e najwyraźniej nie ma możliwości

  4. bind -p( | grep -i '"E"') pokazuje
    • "E": self-insert,
    • ale nie "e": self-insert
    • podczas gdy "A": self-inserti "a": self-insertsą obecne.

2

Jestem trochę zardzewiały, ale wklejanie w Terminalu działa inaczej niż wklejanie w programie GUI: każda postać jest wysyłana jako osobne naciśnięcie klawisza, a nie jako memcopy ze schowka do bufora aplikacji. Więc jeśli „e” zostało ponownie mapowane, zostanie również mapowane w wklejeniu.

Sprawdź następujące lokalizacje:

System Preferences > Keyboard > Shortcuts

~/Library/KeyBindings/KeyBindings.dict

$ defaults read com.apple.Automator NSUserKeyEquivalents


Sprawdź, co dokładnie?
nohillside

Czy eklucz został ponownie przypisany.
zencraft

1
Zakładając, że OP nie ma zbyt dużego doświadczenia w takich rzeczach: czego dokładnie powinni szukać? Przykład takiego mapowania może być pomocny.
nohillside

1
W przypadku skrótów klawiaturowych poszukaj kluczowych zmian: po lewej stronie znajduje się lista aplikacji, a po prawej lista skrótów. Upewnij się, że terminalu nie ma na liście aplikacji. Pozostałe dwa powinny być puste; jeśli KeyBindings.dict istnieje lub polecenie defaults coś zwraca, opublikuj to tutaj do dalszej analizy.
zencraft

1

Możesz spróbować ustawić Terminal tak, aby otwierał edytor tekstu (emacs, vi itp.) Po otwarciu nowego okna. Na przykład w preferencjach terminalu dla „Powłoki” możesz ustawić polecenie Uruchom, takie jak /usr/bin/emacs. Jeśli nie możesz wejść ew okienko preferencji, dzieje się coś jeszcze dziwniejszego niż dotychczas proponowane ...

Kiedy nowe okno Terminal jest otwarty, emacs będzie powinno się rozpocząć i można spróbować nacisnąć eitd. Nie mam pojęcia, co się stanie, ale jak @Pierce powyżej, jestem ciekaw, co jest być może dzieje.


0

Sprawdź ustawienie stty i upewnij się, że „e” nie zostało przypadkowo ustawione jako backspace lub podobne. Byłem tam, zrobiłem to. Stty coś \ e Zrobiłoby to Zalecenie, aby wyłączyć / skomentować .bash * prawdopodobnie również to odkryłoby.


0

Miałem ten sam problem, który spowodowany był literówką /etc/inputrc:

et output-meta on

zamiast

set output-meta on

0

Dziwne, że właśnie to wymyśliłem z systemem macOS 10.13.6 na MacBooku Air. Jeden użytkownik był w porządku, terminal administratora działający w trybie bash nie zaakceptowałby małej litery „a” - nie pisał, nie wklejał itp. Uruchamianie zsh byłoby w porządku. Inni użytkownicy, w porządku. Myślę, że stało się to wcześniej i naprawiłem to, usuwając plik /Users/admin/.inputrc i .bash_profile. Dodałem je ponownie i działa. Co dziwne, w tych plikach nie ma nic ważnego. .inputrc jest po prostu „ustaw na Włącz-ignoruj-wielkość liter”, a w pliku .bash_profile znajduje się kilka aliasów wiersza poleceń. Szczerze mówiąc, coś jeszcze może się wydarzyć, ale na razie działa.

Wydaje mi się, że pamiętam konieczność usunięcia i ponownego dodania tych plików w związku z tym problemem. Cóż, te pliki mogą przynajmniej wywołać lub zresetować problem.


-1

Wystarczy usunąć plik .inputrc, znajduje się on w katalogu głównym. (To ukryty plik).

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.