Jak zmienić skrót poprzedniego / następnego słowa w bash?

20

Jak skonfigurować Ctrl-Lewo i Ctrl-Prawo jako skróty poprzedniego / następnego słowa dla bash (obecnie Alt-B i Alt-F)?

ripper234
źródło
Um, czy to pytanie nie dzwoni?
Gilles 'SO - przestań być zły'
@Gilles - Myślałem, że wcześniej zapytałem o coś podobnego, przepraszam. Zamknięto oryginał jako duplikat (ponieważ należy tu bardziej niż do superużytkownika).
ripper234

Odpowiedzi:

26

Prawidłowa odpowiedź zależy od używanego terminala.

W przypadku Gnome Terminal lub najnowszych wersji xterm umieść to w ~ / .inputrc:

"\e[1;5C": forward-word
"\e[1;5D": backward-word

W przypadku PuTTY umieść to w ~ / .inputrc:

"\eOC": forward-word
"\eOD": backward-word

W przypadku rxvt umieść to w swoim ~ / .inputrc:

"\eOc": forward-word
"\eOd": backward-word

Prawdopodobnie można uniknąć umieszczenia wszystkich tych razem w ~ / .inputrc.

We wszystkich przypadkach musisz także umieścić to w swoim ~ / .bashrc (lub ~ / .zshrc):

export INPUTRC=~/.inputrc

Jeśli to nie zadziała lub masz inny terminal, przejdź do terminala i wpisz Ctrl+ V Ctrl+ ->. Następnie użyj tego zamiast "\e[1;5C"lub "\eOC"powyżej. Powtórz dla Ctrl+ <-.

Zauważ, że musisz napisać sekwencje specjalne klawiatury za pomocą składni inputrc , np

  • \C oznacza kontrolę
  • \eoznacza ucieczkę (która pojawia się jak ^[podczas pisania za pomocą Ctrl + V powyżej)
Mikel
źródło
Ctrl + V, Ctrl -> drukuje „^ [[1; 5C”, a ja używam terminala gnome.
ripper234
2
Więc spróbuj "\e[1;5C": forward-word. I zrób też Ctrl+ Vdla Ctrl+ Left Arrow.
Mikel
Dzięki, działa jak urok. Powoli, ale na pewno nauczę się pływać w linuksie. Dlaczego w pierwszej kolejności musieli sprawić, by było to nieintuicyjne? (Musisz przyznać, że ctrl-lewy, ctrl-prawy są lepszymi wyborami)
ripper234,
1
Jeśli uważasz, że Linux nie jest intuicyjny, spróbuj domyślnej instalacji FreeBSD lub nawet Solaris. Posiadanie bata jako początkowej powłoki to marzenie. Ponadto, ponieważ klawiatury nie zawsze miały klawisze strzałek, Emacsa, a tym samym skróty do obsługi bash. Spróbuj użyć Ctrl-b i Ctrl-f przez chwilę.
penguin359,
2
Zaletą systemów UNIX / Linux jest łatwość zmiany ustawień. Po skonfigurowaniu ulubionych programów tak, jak lubisz, po prostu skopiuj go. Właściwie używam kontroli wersji dla moich plików katalogu domowego, takich jak .inputrc, .bashrc, .vimrc i tak dalej. Używam mercurial do klonowania i aktualizowania wszystkich moich ustawień katalogu domowego między komputerami. W pewnym momencie planuję również opublikować moje repozytorium, aby inni mogli podzielić się nim z moją ciężką pracą.
penguin359,
3

Jeśli używasz ZSH, musisz zastosować inną metodę, ponieważ cytując odpowiednie części z przewodnika ZSH ArchLinux :

Zsh nie używa readline # like bash #, zamiast tego używa własnego i mocniejszego zle.

Nie czyta / etc / inputrc ani ~ / .inputrc.

Po przeczytaniu tego przewodnika doszedłem do wniosku, że potrzebuję nowoczesnego źródła ZSH, aby uzyskać ogólny pomysł, jak to zrobić, i znalazłem ten plik oh-my-zsh, który opisuje pożądane zachowanie, skopiowałem odpowiednie części I chciałem do mojego ~ / .zshrc:

bindkey -e #Use emacs mode, it's more sane for beginners
bindkey '^[[1;5C' forward-word # [Ctrl-RightArrow] - move forward one word
bindkey '^[[1;5D' backward-word # [Ctrl-LeftArrow] - move backward one word
# Also, If you want to copy paste this into your zshrc,
# I'm pretty sure you would have to add this at the top : 
# setopt interactive_comments
mirandalol
źródło
Próbowałem ctrl +
strzałka w prawo