Niestandardowe powiązania klawiszy dla trybu powłoki vi, tj. „Set -o vi”?

18

Właśnie odkryłem cuda set -o vii jestem ciekawy, czy można dostosować ten tryb powłoki vi na niektóre z tych samych sposobów, w jakie można dostosować vi lub vim?

Na przykład utworzyć niestandardowe powiązanie klucza, aby zamapować wygodniejszy klucz lub kombinację klawiszy esc?

Jeśli nie jest obecnie obsługiwany, jak trudno byłoby zmienić kod źródłowy programu i kod stały w niektórych dostosowaniach, czy byłby to zły pomysł?

Jonasz
źródło
Znalazłem odpowiedź tutaj < unix.stackexchange.com/questions/27699/remap-bash-vi-keys >
DinizBr

Odpowiedzi:

17

Tak, możesz zmienić mapowania klawiszy (dla trybu vi- lub emacs-podobnego) za pomocą bindwbudowanego. Jest to właściwie funkcja readline (więc możesz mieć powiązania podobne do vi we wszystkich programach readline, nie tylko bash).

Klucz, którego szukasz, jest wywoływany vi-movement-modei domyślnie jest to klawisz \e(Escape). Możesz dodatkowo powiązać go z (i jest to raczej głupie) równość w ten sposób. Druga linia pozbywa się wiązania, aby uciec:

$ bind "=":vi-movement-mode 
$ bind -r "\e"

Uruchomienie bind -ppokaże wszystkie klucze, które możesz powiązać, oraz ich bieżące powiązania (jeśli istnieją).

Możesz wstawiać do niego bindpolecenia .bashrclub edytować, ~/.inputrcaby zastosować je do wszystkich uruchomionych programów readline. Dokumenty readline zawierają pełne szczegóły.

derobert
źródło
1
To jest niesamowite. Dzięki wielkie. Byłem w stanie dowiedzieć się, jak powiązać kluczowe kombinacje, jak to bind "Control-Space":vi-movement-mode- działa dobrze. Ale na przykład w vimie wpisałem dwa znaki z rzędu jako wyzwalacz esc, tzn. Jeśli wpiszesz jj, wrócisz do normalnego trybu. To nie zadziałało, kiedy próbowałem z bindem, czy jest jakiś specjalny sposób, żeby to działało?
Jonasz
@Jonah nie żebym wiedział, że jest w trybie off-hand, ale ostatnio nie
czytałem
@chishaku musisz poprzedzić imię Jonasza znakiem at ( @), w przeciwnym razie nie otrzyma powiadomienia.
derobert
2
@Jonah Właśnie próbowałem zrobić to samo. Czy kiedykolwiek to rozgryzłeś?
chishaku
1
unix.stackexchange.com/questions/303282/ ... Z jakiegoś powodu potrzebujesz cytatówbind '"jk":vi-movement-mode'
Hielke Walinga