W bash klawisz home/ end/ deletewstawia tyldę lub jeśli poprzedza ją klawisz Escape:[1~
Więc piszę echo hellp
, przesuwam kursor hel|lp
i piszę delete, i tak dalej~tilde
Poza tym piszę echo hellp
, przesuwam kursor hel|lp
i piszę esc, a następnie usuwam i bam, mam[3~
$ echo hel~lp
hel~lp
$ echo hell[3~o
hell[3~o
~
Moja wersja bash:
$ bash --version
GNU bash, version 3.1.17(1)-release (i686-pc-msys)
Copyright (C) 2005 Free Software Foundation, Inc.
To czego chcę to zachowanie cmd.exe
:
- Chcę, aby Esc wyczyścił bieżącą linię / bufor
- Chcę, aby strona główna przesunęła kursor na początek linii przed pierwszym znakiem
- Chcę, aby End przesunął kursor na koniec linii przed pierwszym znakiem
- Chcę usunąć, aby usunąć następny znak (na prawo od kursora) z bieżącej linii / bufora
Co muszę edytować, aby to naprawić? Czy to jest domyślne w twoim bashu?
aktualizacja: pracuję na komputerze z systemem Windows, na którym działa program Windows, sh.exe (jak widać powyżej GNU bash), skompilowany z mingw dla msys:
$ uname -s -m -o
MINGW32_NT-5.1 i686 Msys
command-line
bash
keyboard-shortcuts
key-binding
opcjonalny
źródło
źródło
Odpowiedzi:
Dostosowujesz bash za pomocą
.inputrc
pliku w swoim pliku/home/username
, możesz skopiować domyślnytu jest moje (komentarze zaczynają się od #)
aby dowiedzieć się, co należy wpisać w inputrc po lewej stronie (kod ucieczki, ponieważ może się różnić w zależności od laptopa / komputera stacjonarnego ...), w wierszu polecenia wpisz
echo '
następnie,Ctrl-V
a następnie klawisz, np.Home
wpisz'
przykładnastępnie zastąpić każdy
^[
z\e
dodatku\M-
doAlt
teoretycznie byłoby użyć\C-
dlaCtrl
ale aktualnie nie ma pracy (ograniczenie windows)dostępne polecenia (jak
backward-kill-line
) są wymienione w http://www.gnu.org/software/bash/manual/bashref.html#index-backward_002dkill_002dline-_0028C_002dx-Rubout_0029możesz wyświetlić istniejące skróty / powiązania klawiaturowe za pomocą
bind -p
lubnie zadzieraj z TERMCAP
źródło
find / -name 'inputrc.default'
nic nie znajduje na moim komputerze. Mój dom i koniec kiedyś działały ... :( Również FYI innym: Aby przeładować plik .inputrc, użyjbind -f ~/.inputrc
.$if mode=emacs
bloku. Dodałem te dwie linie i znów działają !! : D"\e[1~": beginning-of-line ... "\e[4~": end-of-line
.Cóż, skoro mówisz, że pracujesz w systemie Windows i nie używasz odpowiedniego emulatora terminali, takiego jak PuTTY (z mintty , puttycyg i in. ), Radzę zajrzeć do dokumentacji readline i poznać skróty do readline. Na dłuższą metę będzie lepiej.
Jeśli miałbyś użyć emulatora terminala zamiast okna konsoli (nie mówiąc tu o tłumaczu / powłoce), który jest dostarczany z systemem Windows, uzyskałbyś bardziej konfigurowalną alternatywę. Gdy spróbujesz użyć innych programów, takich jak Vim, sytuacja się pogorszy.
Istota: użyj odpowiedniego emulatora terminala, nawet w systemie Windows, lub naucz się skrótów readline. Przetestowałem te, z których teraz korzystam najczęściej i współpracują
msys.bat
.Plik do edycji będzie mieć
/usr/share/terminfo
(co nie istnieje w MinGW) - stosowanietic
zasad „kompilacji” (który nie jest jeszcze włączone, bo każdy wie, że wsparcie będzie poważnie okaleczony). Jednak nie widziałem żadnego przydatnego rozwoju, który sprawiłby, że byłby nawet prawie użyteczny w systemie Windows. Właśnie dlatego powinieneś używać odpowiedniego emulatora terminali. Ale jestem pewien, że chirurg będzie mógł użyć noża kuchennego do operacji, więc dlaczego nie skorzystać z wbudowanych okien konsoli Windows. Powodzenia.źródło
Sprawdź instalację Readline
Kiedy dzieje się tak przy minimalnej instalacji najnowszego Debiana / Ubuntu, prawdopodobnie dzieje się tak, ponieważ
readline-common
pakiet nie został zainstalowany . Wystarczy zainstalować pakiet, aby go rozwiązać.Np. W Dockerze z pisaniem Debian Stretch
ls
HOME:Pamiętaj, że po zainstalowaniu readline-common będzie to miało wpływ tylko na nowe powłoki logowania.
źródło
exec bash
jest sposobem na zastąpienie bieżącej instancji basha nową, bez wychodzenia z terminala (co może być potrzebne podczas gry w kontenerze pTTY).Znalazłem również następujące pomocne: https://wiki.archlinux.org/index.php/Home_and_End_keys_not_working
Konkretnie:
Jeśli klucze nie działają, przyczyną może być to, że dany terminal wysyła kody specjalne, których nie ma na tej liście. Najpierw musisz dowiedzieć się, jakie kody ucieczki są wysyłane. Aby je zobaczyć, możesz użyć polecenia Readline o nazwie „quoted-insert” lub uruchomić polecenie showkey --scancodes, które wypisuje wartość klucza dosłownie. Domyślne powiązanie wstawionego cudzysłowu to Ctrl + V.
Na przykład możesz podać następującą serię danych wejściowych w swoim terminalu:
I uzyskaj jako wynik
$ ^ [[1 ~ ^ [[4 ~
^ [Wskazuje znak ucieczki w twojej powłoce, więc oznacza to, że twój klawisz Home ma kod ucieczki [1 ~, a ty klawisz End ma kod ucieczki [4 ~. Ponieważ te kody ucieczki nie są wymienione w domyślnej konfiguracji Readline, musisz je dodać:
Zauważ, że Readline używa \ e do oznaczenia znaku ucieczki.
Odpowiednim fragmentem było umieszczenie tego w inputrc:
źródło