Bash CTRL, aby przesuwać kursor między słowami / ciągami


85

Jestem przyzwyczajony do używania CTRL klawisza, aby poruszać się szybciej, używając klawiszy strzałek w lewo i w prawo (przechodzi na koniec słowa, zamiast po jednym znaku na raz).

Czy mogę to jakoś zrobić w bash?

Prawdopodobnie mógłbym to zakodować, ale zastanawiałem się, czy jest coś łatwiejszego / już zrobione.

Odpowiedzi:


94

Z domyślnymi przypisaniami klawiszy readline, ALT+ Bcofa o jedno słowo, ALT+ Fprzechodzi do przodu o jedno słowo.

Domyślna konfiguracja Ubuntu dodatkowo zapewnia CTRL+ strzałki, do których jesteś przyzwyczajony. Są one /etc/inputrci są określone w następujący sposób:

# mappings for Ctrl-left-arrow and Ctrl-right-arrow for word moving
"\e[1;5C": forward-word
"\e[1;5D": backward-word
"\e[5C": forward-word
"\e[5D": backward-word
"\e\e[C": forward-word
"\e\e[D": backward-word

Nie wiem, dlaczego potrzebujemy trzech z nich ...


20
@bryan_ruiz: Różne klawiatury (emulatory terminali itp.) wyświetlają różne sekwencje. Aby zobaczyć sekwencję, naciśnij Ctrl-v, a następnie klawisz. Dla mnie w PuTTY, Ctrl-v Ctrl-RightArrow daje mi ^[OCto samo co twoje. W xtermdostaję ^[[1;5to samo, co Thomas ”.
Wstrzymano do odwołania.

7
lepiej byłoby to zrobić edytując ~/.inputrczamiast tego
svassr

1
Nie mogę uwierzyć, jak długo bez tego żyłem.
Ryan Shillington,

3
Edycja ~ / .inputrc może zatrzymać ładowanie pliku „systemowego” (/ etc / inputrc). Zauważ również, że ustawienia 'set -o' - "set -o emacs" powinny dać ci przypisania klawiszy stylu emacsa w linii poleceń, w przeciwieństwie do np. "Set -o vi" (po wykonaniu tej czynności będziesz musiał nacisnąć ESC przed próbą użycia w lub b).
David Goodwin

4
@DavidGoodwin Po krótkich poszukiwaniach, dodanie $include /etc/inputrcspowoduje również załadowanie systemowego pliku inputrc.
SirGuy

42

Jak wyjaśnił Thomas, możesz dodać powiązania do /etc/inputrc .

Inną alternatywą, która ładuje się za każdym razem, gdy się logujesz, jest umieszczanie ich w ~/.bashrc następujący sposób:

#use ctl keys to move forward and back in words
bind '"\eOC":forward-word'
bind '"\eOD":backward-word'

Dowiedziałem się, że możesz użyć cat > /dev/null do spojrzenia na znaki, które wysyła twoja klawiatura, np. CTRL + strzałka w prawo pokazuje:

^[OC

gdzie ^[jest to samo co \e tak, skąd pochodzi kod w bindpoleceniu.

Możesz również wyszukać takie wiązania:

bind -p | grep forward-word

Wszystko to jest cholernie niesamowite i cieszę się, że odkryłem więcej mocy basha.


6
Myślę, że wpłynie to tylko na bash, podczas gdy inputrcrozwiązanie będzie dotyczyło również innych programów używających readline, np. Interpreter Pythona, większość innych powłok. Zauważ, że możesz również wstawić polecenia, ~/.inputrcjeśli nie masz roota lub nie chcesz, aby były stosowane do wszystkich użytkowników.
Thomas

Z jakiegoś powodu zadziałało to tylko dla mnie, gdy zamieniłem kolejność twoich linii powyżej. Dalsza uwaga. Używam Ubuntu 14.04LTS za kitem z Windows 8.1.
Rebecca Dessonville

2
+1 specjalnie dla I learned that you can use cat > /dev/null to look at the characters that your keyboard is sending. #TIL
Sungam

3
Możesz także po prostu wpisać readi nacisnąć Enter, aby osiągnąć ten sam efekt, co cat > /dev/null. Jestem leniwy, więc lubię rozwiązania wymagające mniej pisania. :)
theglossy1

ctrl + 4 powoduje awarię mojego kota (wysyła ^ /)
user1040495

4

.Inputrc w twoim katalogu domowym spowoduje, że ctrl + left przestanie działać na Ubuntu (na przykład).

Aby wszystko działało, dodaj do ~ / .inputrc:

# Include system-wide inputrc, which is ignored by default when
# a user has their own .inputrc file.
$include /etc/inputrc

kredyt dla f.kowal

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.