Presione CTRL para mover el cursor entre palabras / cadenas

85

Estoy acostumbrado a usar la CTRLtecla para moverme más rápido cuando uso las teclas de flecha izquierda y derecha (va al final de una palabra, en lugar de un carácter a la vez).

¿Puedo hacer eso en bash de alguna manera?

Probablemente podría codificarlo, pero me preguntaba si hay algo más fácil / ya hecho.

Bryan Ruiz
fuente

Respuestas:

94

Con las combinaciones de teclas predeterminadas de readline, ALT+ Bretrocede una palabra, ALT+ Favanza una palabra.

La configuración predeterminada de Ubuntu también proporciona CTRLflechas + como está acostumbrado. Estos se /etc/inputrcespecifican y especifican de la siguiente manera:

# 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

No estoy seguro de por qué necesitamos tres de ellos ...

Thomas
fuente
20
@bryan_ruiz: Diferentes teclados (emuladores de terminal, etc.) generan diferentes secuencias. Para ver la secuencia presione Ctrl-v y luego la tecla. Para mí en PuTTY, Ctrl-v Ctrl-RightArrow me da ^[OClo mismo que el tuyo. En xtermobtengo ^[[1;5que es lo mismo que el de Thomas.
Pausado hasta nuevo aviso.
7
sería mejor hacerlo editando en su ~/.inputrclugar
svassr
1
No puedo creer cuánto tiempo viví sin esto.
Ryan Shillington
3
La edición de ~ / .inputrc puede detener la carga del 'sistema' (/ etc / inputrc). También tenga en cuenta que la configuración 'set -o' - "set -o emacs" debería proporcionarle combinaciones de teclas de estilo emacs en la línea de comandos, a diferencia de, por ejemplo, "set -o vi" (después de hacer esto, deberá presionar ESC antes de intentar utilizar w o b).
David Goodwin
4
@DavidGoodwin Después de un poco de búsqueda, agregar $include /etc/inputrctambién cargará el archivo inputrc del sistema.
SirGuy
42

Como explicó Thomas, puede agregar los enlaces a /etc/inputrc.

Otra alternativa para que se cargue cada vez que inicie sesión, es ponerlos ~/.bashrc así:

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

Aprendí que puede usar cat > /dev/null para ver los caracteres que envía su teclado, por ejemplo, CTRL + flecha derecha muestra:

^[OC

where ^[es lo mismo \e que de ahí de donde viene el código en el bindcomando.

También puede buscar enlaces como este:

bind -p | grep forward-word

Todo esto es increíble y me alegro de haber descubierto más poder de bash.

Bryan Ruiz
fuente
6
Creo que esto solo afectará a bash, mientras que la inputrcsolución también se aplicará a otros programas que usan readline, por ejemplo, el intérprete de Python, la mayoría de los demás shells. Tenga en cuenta que también puede introducir los comandos ~/.inputrcsi no tiene root o no desea que se apliquen a todos los usuarios.
Thomas
Por alguna razón, esto solo funcionó para mí cuando cambié el orden de sus líneas anteriores. Nota adicional. Estoy usando Ubuntu 14.04LTS detrás de la masilla de Windows 8.1.
Rebecca Dessonville
2
+1 especialmente para I learned that you can use cat > /dev/null to look at the characters that your keyboard is sending. #TIL
Sungam
3
También puede simplemente escribir ready presionar enter para lograr el mismo efecto que cat > /dev/null. Soy vago, así que me gustan las soluciones con menos escritura. :)
theglossy1
ctrl + 4 bloquea mi gato (envía ^ /)
user1040495
4

Un .inputrc en su directorio de inicio hará que ctrl + left deje de funcionar en Ubuntu (por ejemplo).

Para que todo funcione, agregue lo siguiente a ~ / .inputrc:

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

crédito a f.kowal

Constantin De La Roche
fuente