Bash: Jak przesunąć kursor w lewo słowo po jednym?

14

W OSX mogę po prostu przytrzymać optionklawisz i naciskać lewy klawisz kursora, aż dojdę do słowa, które muszę edytować (lub w Vi mogę po prostu nacisnąć b, ale nie byłem w stanie wymyślić, jak to zrobić w Terminalu jeszcze...

Japończyk
źródło
Na tej stronie można zobaczyć pełną listę powiązań readline , w tym instrukcje dostosowywania własnych powiązań.
jasonwryan

Odpowiedzi:

26

Aby ustawić powiązanie klawiszy: Najpierw musisz dowiedzieć się, jakie kody klawiszy tworzy sekwencja klawiszy Ctrl+ Left. Wystarczy użyć polecenia, cataby wyłączyć wszelkie interferencje z istniejącymi powiązaniami klawiszy, a następnie wpisać sekwencję klawiszy. W moim systemie (Linux) wygląda to tak:

$ cat
^[[1;5D

Naciśnij Ctrl+, daby wyjść z cat. Teraz dowiedziałeś się, że Ctrl-Left wydaje 6 kluczowych kodów:

  • Escape (^ [)
  • [
  • 1
  • ;
  • 5
  • re

Teraz możesz wydać polecenie bind:

bind '"\e[1;5D": backward-word'
Daniel Kullmann
źródło
6
Możesz dodać `` \ e [1; 5D ”: słowo wsteczne do $ HOME / .inputrc, aby uzyskać trwały efekt, jeśli chcesz.
llhuii
@llhuii +1, zapomniałem o tym wspomnieć!
Daniel Kullmann
2
+1 za najbardziej elastyczny sposób wiązania dowolnych kombinacji klawiszy w dowolnym miejscu!
Irfy,
14

Funkcja bash, którą chcesz, to backward-word. Możesz uruchomić, bind -q backward-wordaby uzyskać listę klawiszy powiązanych z tą funkcją. Jednym wspólnym wiązaniem jest Esc+b

Ponadto wiele terminali obsługuje Ctrl+ Left(ten sam skrót klawiszowy, którego można używać w X, aby przeskakiwać do tyłu o słowo)

Michał Mrożek
źródło
1
Ok, zwraca, backward-word can be invoked via "\eb".ale jak powiązać Control + Lewo zamiast Esc + B? Jedną wadą Esc + b, którą już widzę, jest to, że muszę odpuścić klawisz Esc za każdym razem, gdy mogę cofnąć słowo, czy nie ma lepszego sposobu?
nipponese
1
Czy jest lepszy sposób? Oczywiście: set editing-mode vi:)
jasonwryan,
3
@nipponese „esc b” można również używać na klawiaturze jako ALT-b. W zależności od konfiguracji może to być konkretnie lewy lub prawy alt, więc spróbuj obu.
Random832
8

Domyślny skrót klawiszowy w Bash backword-wordto Alt+ b. Ten sam wynik można uzyskać za pomocą Esc+ b. Powinieneś spróbować tych przed edycją skrótów klawiszowych.

Użyj bindpolecenia, aby edytować lub bind -q [name]uzyskać aktualny skrót klawiaturowy dla określonej akcji.

Marius Cotofana
źródło
2
... i do przodu -Alt + f
Putnik