Możesz określić sekwencję znaków emitowaną przez klawisz, naciskając Ctrl- vw wierszu poleceń, a następnie naciskając klawisz, który Cię interesuje. W moim systemie dla F12, otrzymuję ^[[24~
. ^[
Reprezentuje Esc. Różne typy terminali lub emulatorów terminali mogą emitować różne kody dla tego samego klucza.
W wierszu polecenia Bash możesz wprowadzić takie polecenie, aby włączyć makro kluczowe, abyś mógł je wypróbować.
bind '"\e[24~":"foobar"'
Teraz, po naciśnięciu F12, w wierszu poleceń pojawi się „foobar”, gotowy do dalszej edycji. Jeśli chcesz, aby naciśnięcie klawisza natychmiast wprowadziło polecenie, możesz dodać nową linię:
bind '"\e[24~":"pwd\n"'
Teraz po naciśnięciu F12wyświetli się bieżący katalog bez konieczności naciskania Enter. A co, jeśli już wpisałeś coś w linii i używasz tego, co wykonuje się automatycznie? Może się zabrudzić. Możesz jednak wyczyścić linię jako część makra:
bind '"\e[24~":"\C-k \C-upwd\n"'
Przestrzeń zapewnia, że Ctrl- uma coś do usunięcia, aby dzwonek nie dzwonił.
Gdy już sprawisz, że makro będzie działało tak, jak chcesz, możesz je utrwalić, dodając je do ~/.inputrc
pliku. Nie ma potrzeby używania bind
polecenia ani zewnętrznego zestawu pojedynczych cudzysłowów:
"\e[24~":"\C-k \C-upwd\n"
Edytować:
Możesz także utworzyć powiązanie klawiszowe, które wykona coś bez zakłócania bieżącego wiersza poleceń.
bind -x '"\eW":"who"'
Następnie, gdy wpisujesz polecenie, które wymaga na przykład nazwy użytkownika i musisz znać nazwy zalogowanych użytkowników, możesz nacisnąć Alt- Shift-, Wa wynik who
zostanie wyświetlony, a monit zostanie ponownie wyświetlony z nienaruszonym poleceniem częściowym i kursorem w tej samej pozycji w linii.
Niestety, nie działa to poprawnie w przypadku kluczy, takich jak te, F12które wyświetlają więcej niż dwa znaki. W niektórych przypadkach można to obejść.
Polecenie ( who
w tym przypadku) może być dowolnym plikiem wykonywalnym - programem, skryptem lub funkcją.
bind '"\C-q": menu-complete'
na przykład (lub w~/.inputrc
:"\C-q": menu-complete
). Może być również koniecznestty -ixon
w twojej~/.bashrc
Aby wyłączyć kontrolę przepływu i upewnij ^ S i ^ Q dostępne.^[
reprezentuje,esc
a potem wydajesz się zastępować to\e
w swoim przykładzie. Czy mógłbyś wyjaśnić, dlaczego, proszę?^[
jest reprezentacją wyjściową. Jest\e
to jedyny sposób, aby go wprowadzić (^[
nie działa).Możesz zdefiniować skróty klawiszowe bash w
~/.inputrc
(plik konfiguracyjny biblioteki GNU Readline). Składnia to<keysym lub nazwa klucza>: makro
na przykład:
Control-o: "> output"
stworzy makro, które po naciśnięciu wstawi "> wyjście" ControlO
"\e[11~": "echo foobar"
stworzy makro, które wstawi "echo foobar" po naciśnięciu F1... Nie wiem, do czego klawisze F11są od ręki.
Edytować:
.inputrc
rozumie\n
sekwencję ucieczki dla wysuwu wiersza, więc możesz użyć"\e[11~": "echo foobar\n"
Który skutecznie `` naciśnie enter '' po wydaniu polecenia.
źródło
Alt
użytku\e
np"\eo": "> output"
..inputrc
zobacz hackaday.com/2018/01/19/linux-fu-custom-bash-command-completionTo rozwiązanie jest specyficzne dla środowisk X11 i nie ma nic wspólnego z bash, ale dodaje następujące elementy do twoich .Xmodmaps
% loadkeys keycode 88 = F12 string F12 = "foobar" %
wyśle napis „foobar” do terminala po naciśnięciu F12.
źródło
Chciałem związać
Ctrl+B
się z poleceniem. Zainspirowany powyższą odpowiedzią, próbowałem użyć,bind
ale nie mogłem dowiedzieć się, na jaką serię tajemniczych zawijasów (\e[24~
?) Tłumaczy sięCtrl+B
.Na komputerze Mac przejdź do Ustawienia aplikacji Terminal, Profile -> Klawiatura ->
+
następnie naciśnij skrót klawiaturowy, którego szukasz, i pojawi się. Dla mnieCtrl+B
zaowocowało to\002
sukcesem w dowodzeniubind '"\002":"echo command"'
Ponadto, jeśli chcesz, aby polecenie zostało wykonane od razu (a nie tylko wstawione do monitu), możesz dodać Enter na końcu polecenia, na przykład:
bind '"\002":"echo command\015"'
źródło