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.

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 ...


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.


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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.