Bash: ¿puedo configurar Ctrl-Retroceso para eliminar la palabra al revés?


19

When in shell (bash): quiero tener Ctrl-Retroceso enlazado para "eliminar la palabra al revés". ¿Es posible?

Editar :

Estoy usando konsole- terminal en KDE.


2
La pregunta es sencilla, no se queja de eso. Solo quiero comentar que a menudo vale mucho la pena facilitar las combinaciones de teclas "estándar" que ya existen en muchas aplicaciones, en lugar de personalizarlas sin una ganancia real y la certeza de nunca ver el comportamiento en sistemas extranjeros. Ctrl+wes a lo que debes acostumbrarte, en mi humilde opinión.
Daniel Andersson

@ Daniel Andersson: o alternativamente, puede desarrollar una forma de transferir sus configuraciones a la máquina extranjera.
Adobe

Compartir archivos de puntos es un problema resuelto, pero no ayuda mucho más que en computadoras más o menos locales donde tienes privilegios bastante abiertos. Si está en un sistema externo, lo más probable es que no tenga la libertad de reconfigurar cosas así (al menos no sin ser golpeado por colegas que también usan la misma máquina :-)). Además, cada nueva aplicación necesitará un tratamiento especial.
Daniel Andersson

66
Tengo el problema inverso, estoy acostumbrado a Ctrl-w"eliminar la palabra anterior" en la consola, y lo hago por instinto incluso en Eclipse o Chrome, donde significa cerrar pestaña / cerrar archivo actual. Bastante molesto.
Ezequiel Muns

1
Tengo el mismo problema con Chrome SShInATab. ¿Cómo hago ctrl-W sin ctrl-W? :)
Riccardo SCE

Respuestas:


11

¿Por qué no simplemente usar Alt+ Backspaceo Ctrl+ Wque ya están mapeados en la mayoría de las terminales? No estoy seguro acerca de la consola. Xmodmap (man xmodmap) también se puede utilizar para reasignar otras claves personalizadas. (Paradójicamente, xmodmap no puede reasignar Backspace muy bien porque el terminal anula las asignaciones, pero funciona bien con la mayoría de las teclas ...).


99
Porque solía Ctrl-Retroceso en mis Emacs. Sabía sobre Ctrl-w. Alt-Retroceso es nuevo para mí (+1).
Adobe

1
Buen punto, @hellork. Puede interceptar el control + retroceso en el servidor X (a través de xmodmap) y asignarlo a algún carácter no utilizado (como el retroceso alternativo).

44
Lo molesto de esto es que ctrl + retroceso es un mapeo muy común para "eliminar palabras al revés" en la mayoría de las aplicaciones GUI en la mayoría de los principales sistemas operativos. Del mismo modo, Ctrl + W está muy extendido para "cerrar ventana". Alt + w rara vez se usa para algo en las GUI, que se me ocurra. La estandarización sería genial. Me pregunto cuál sería la mayor interrupción, el cambio de terminales o el cambio de GUI.
nada101

1
@naught, Control-W ya es la tecla predeterminada de borrado de palabras en terminales Unix. Sí, entra en conflicto con la convención de Windows / GUI, pero de hecho llegó primero, por muchos años. ¡Culpa a Microsoft!
alexis

11

Encontré este hilo a través de google, pero la respuesta no fue lo que quería escuchar. Así que jugué:

En mi terminal, el retroceso normal envía ^H, mientras que ctrl + retroceso envía ^?. Por lo tanto, debería tratarse simplemente de volver a vincular ^?para eliminar una palabra, que de forma predeterminada está disponible a través de Ctrl + W.

Primero (intento fallido):

$ bind -P | grep 'C-w'
unix-word-rubout can be found on "\C-w".

Por lo tanto, esto debería funcionar:

$ bind '"\C-?":unix-word-rubout'

Sin embargo, no ... ¿alguien capaz de explicar?

Segundo intento (exitoso):

$ bind '"\C-?":"^W"'

Donde the ^Wes literal / raw ^W(presione ctrl + V y luego ctrl + W para que aparezca).


¡Tu primera solución funcionó para mí, en realidad! Segundo no lo hizo.
Drew Hoskins

¿El segundo intento parece reemplazar el espacio de retroceso en lugar de Ctrl-Retroceso?
user541686

7

Simplemente edite su ~/.inputrc(puede que necesite crear uno o copiar el que está /etc/inputrcallí) para que contenga:

# Ctrl-Delete: delete next word
"\e[3;5~": shell-kill-word

# Ctrl-Backspace
"\C-H": shell-backward-kill-word

Esto asignará también Ctrl+ Deletepara eliminar la palabra al lado del cursor.


No funciona para mi
Jonathan

6

Aquí hay algunas buenas respuestas, pero lo resolví en Konsole con Configuración-> Editar perfil actual-> Teclado-> Editar, y luego agregué una asignación de Backspace+Controla \x17. (Encontré el código ASCII para usar Ctrl-w showkey --ascii).


Gracias por señalar la cosa con showkey. Por lo tanto, descubrí que ALT+Dpara eliminar la palabra delante del cursor correspondería \x1b\x64.
loki

Gracias, resolvió mi problema. En mi caso, necesito reasignar Alt + Retroceso y su secuencia es \x1b\x7f.
DDMC

3

Eso depende de lo que ve bash. En la interacción terminal regular, bash no ve qué modificadores de teclas presionó, solo el carácter resultante. Retroceso ya es lo mismo que control-H, por ejemplo. Mantener presionado shift o control no hace ninguna diferencia.

SIN EMBARGO, su aplicación de terminal (xterm? Cmd? Terminal? Putty? Depende de su sistema operativo) puede ver sus pulsaciones de teclas, y puede tener una manera de asignar la combinación de teclas de control-retroceso a algo que bash puede distinguir aparte del retroceso.


Descubrí que mi bash no ve retroceso. Pero puede ser posible hacerlo ver eso.
Adobe

@adobe, ¿qué quieres decir? Escriba 'stty' en su terminal y luego lea el manual al respecto. Si ^ H está configurado para ser tu personaje de borrado, puedes configurarlo para otra cosa ... si tienes una buena razón.

1
Hay un buen ejemplo de cómo hacer esto en github.com/calj/gtconf/blob/master/zsh/zshrc . Konsole te permite hacerlo. Copie uno de los archivos * .keytab de / usr / share / kde4 / apps / konsole / en ~ / .kde / share / apps / konsole y modifíquelo con las sugerencias en el enlace de arriba, eliminando la línea "tecla Retroceso" y agregando: key Backspace-Shift-Control : "\x7f"y key Backspace-Shift+Control : "\E[9;3~"también cambie la línea de título mientras lo hace: keyboard "Xfree4 Modlist"por ejemplo. Luego puede agregar "\e[9;3~": backward-kill-word"a ~ / .inputrc
Adam

2

Prueba esto:

bind '"\C-_":backward-kill-word'

Opcionalmente, agregue lo siguiente a ~ / .inputrc para que sea permanente:

"\C-_": backward-kill-word

Funciona en bash 4.3.11 en Kubuntu 14.04


2
Es poco probable que Control-backspace sea el mismo que Control-subrayado.
Thomas Dickey

1
De todas las cosas que probé en este hilo, ¡esto funcionó! Usando "GNU bash, versión 4.3.48 (1) -release (x86_64-pc-linux-gnu)" en bash en windows / WSL
Markus Jevring

Esto funciona muy bien para mí en Cygwin, usando GNU bash, version 4.4.12(3)-release (x86_64-unknown-cygwin) .
zagyi

1

En Konsole:

  • hacer clic Settings -> Edit current profile
  • haga clic en la pestaña 'Teclado' -> [Edit...]
  • haga clic en el [Add]botón y debajo del Key Combinationtipo de columna Backspace+Ctrl. En el Outputtipo de columna 0x08(que es convencionalmente el carácter de retroceso)

Ahora debería poder asignar esa clave a backward-kill-word través de

# ~/.bashrc

bind '"\x08":backward-kill-word'

Gracias. Funciona para mí, al menos en xfce4-terminal.
limon

0

En la mayoría de los terminales, CTRL + W ya debería eliminar una palabra al revés. Esto funciona con xterm y supongo que funciona con konsole. CTRL + W es un enlace de teclas estándar en un programa basado en texto que funcionará con vim en modo de inserción, emacs y todos los shells.


55
Tengo Ctrl-w vinculado a "cerrar pestaña" en Emacs, FireFox, Krusader, por lo que configuré también una combinación de cierre de pestañas en Konsole.
Adobe
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.