Bash CTRL per spostare il cursore tra parole / stringhe


86

Sono abituato a usare il CTRLtasto per muovermi più velocemente quando si usano i tasti freccia sinistra e destra (va alla fine di una parola, invece di un carattere alla volta).

Posso farlo in bash in qualche modo?

Probabilmente potrei codificarlo, ma mi chiedevo se c'è qualcosa di più semplice / già fatto.

Risposte:


95

Con le associazioni di tasti readline predefinite, ALT+ Btorna indietro di una parola, ALT+ Fva avanti di una parola.

La configurazione predefinita di Ubuntu fornisce inoltre le CTRLfrecce + come sei abituato. Questi sono in /etc/inputrce specificati come segue:

# 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

Non sono sicuro del motivo per cui abbiamo bisogno di tre di loro ...


20
@bryan_ruiz: tastiere differenti (emulatori di terminale, ecc.) producono sequenze differenti. Per vedere la sequenza premere Ctrl-v poi il tasto. Per me in PuTTY, Ctrl-v Ctrl-RightArrow mi dà ^[OCche è lo stesso del tuo. In xtermI get ^[[1;5che è lo stesso di Thomas.
Dennis Williamson

7
sarebbe meglio farlo modificando ~/.inputrcinvece
svassr

1
Non riesco a credere per quanto tempo ho vissuto senza questo.
Ryan Shillington

4
La modifica di ~ / .inputrc potrebbe interrompere il caricamento di quello di "sistema" (/ etc / inputrc). Nota anche che le impostazioni 'set -o' - "set -o emacs" dovrebbero darti associazioni di tasti in stile emacs sulla riga di comando, al contrario di "set -o vi" (dopo averlo fatto dovrai premere ESC prima di provare a usare w o b).
David Goodwin

5
@DavidGoodwin Dopo un po 'di ricerca, l'aggiunta $include /etc/inputrccaricherà anche il file inputrc di sistema.
SirGuy

42

Come ha spiegato Thomas, puoi aggiungere le associazioni a /etc/inputrc.

Un'altra alternativa, quindi si carica ogni volta che accedi, è inserirli in ~/.bashrc questo modo:

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

Ho imparato che puoi usare cat > /dev/null per guardare i caratteri che la tua tastiera sta inviando, ad esempio, CTRL + freccia destra mostra:

^[OC

dove ^[è uguale a \e quindi è da lì che proviene il codice nel bindcomando.

Puoi anche cercare associazioni come questa:

bind -p | grep forward-word

Tutto questo è davvero fantastico e sono contento di aver scoperto un po 'più di potere di bash.


6
Penso che questo influenzerà solo bash, mentre la inputrcsoluzione si applicherà anche ad altri programmi che usano readline, ad esempio l'interprete Python, la maggior parte delle altre shell. Nota che puoi anche inserire i comandi ~/.inputrcse non hai root o non vuoi che vengano applicati a tutti gli utenti.
Thomas,

Per qualsiasi motivo questo ha funzionato solo per me quando ho cambiato l'ordine delle tue righe sopra. Ulteriore nota. Sto usando Ubuntu 14.04LTS dietro stucco da Windows 8.1.
Rebecca Dessonville

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

3
Puoi anche semplicemente digitare reade premere Invio per ottenere lo stesso effetto di cat > /dev/null. Sono pigro quindi mi piacciono le soluzioni con meno battitura. :)
theglossy1

ctrl + 4 blocca il mio gatto (invia ^ /)
user1040495

4

Un .inputrc nella tua directory home farà sì che ctrl + sinistra smetta di funzionare su Ubuntu (ad esempio).

Per far funzionare tutto, aggiungi quanto segue a ~ / .inputrc:

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

credito a f.kowal


1

Inserisci $include /etc/inputrc

in ~/.inputrc

Ha funzionato per CentOS Linux release 8.2.2004 (Core)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.