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


Cuando está en shell (bash): quiero que Ctrl-Backspace se vincule para "eliminar palabra hacia atrás". ¿Es posible?

Editar:

Estoy usando konsole - terminal en KDE.


13


origen


La pregunta es directa, no hay quejas sobre eso. Solo quiero comentar que, a menudo, vale la pena facilitar enlaces de teclas "estándar" que ya existen en muchas aplicaciones, en lugar de personalizarlos sin obtener ganancias reales y la certeza de no ver el comportamiento en sistemas externos. Ctrl+wes a lo que deberías acostumbrarte, imho. - Daniel Andersson
@ Daniel Andersson: o alternativamente: puedes desarrollar una forma de transferir Su configuración a la máquina extranjera. - Adobe
Compartir archivos punto es un problema resuelto, pero no ayuda mucho en otras computadoras más o menos locales donde tienes privilegios bastante abiertos. Si está en un sistema extranjero, probablemente no tenga la libertad de reconfigurar cosas como esas (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
Tengo el problema inverso, estoy acostumbrado Ctrl-w como "eliminar palabra anterior" en la consola, y hacerlo por instinto, incluso en Eclipse o Chrome, donde significa cerrar pestaña / cerrar el archivo actual. Bastante molesto. - Ezequiel Muns
Tengo el mismo problema con Chrome SShInATab. ¿Cómo hago ctrl-W sin ctrl-W? :) - Riccardo SCE


Respuestas:


¿Por qué no solo usar Alt+Retroceso o Ctrl+W que ya están mapeados en la mayoría de los terminales. No estoy seguro acerca de la consola. Xmodmap (man xmodmap) se puede usar para reasignar otras claves personalizadas también. (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 ...).


7



Porque solía Ctrl-Backspace en mi Emacs. Sabía sobre Ctrl-w. Alt-Backspace es nuevo para mí (+1). - Adobe
Buen punto, @hellork. Podría interceptar el control + retroceso en el servidor X (a través de xmodmap) y asignarlo a algún carácter no utilizado (como alt-backspace).
Lo molesto de esto es que ctrl + backspace es una asignación realmente común para "eliminar palabras atrás" en la mayoría de las aplicaciones GUI en la mayoría de los sistemas operativos. Del mismo modo, Ctrl + W es muy extendido para "cerrar ventana". Alt + w rara vez se utiliza para nada en GUI, que se me ocurre. 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? - naught101
@naught, Control-W ya es la clave de borrado de palabra predeterminada en los terminales Unix. Sí, entra en conflicto con la convención de Windows / GUI, pero de hecho fue lo primero, por muchos años. ¡Culpe a Microsoft! - alexis


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

En mi terminal, el retroceso normal envía ^H, mientras que ctrl + retrocede el espacio ^?. Entonces debería ser un simple caso de reenlace ^? para eliminar una palabra, que por defecto está disponible mediante 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 el ^W es literal / crudo ^W (presione ctrl + V luego ctrl + W para que aparezca).


9



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


Aquí hay algunas buenas respuestas, pero las solucioné en Konsole con Configuración-> Editar perfil actual-> Teclado-> Editar, y luego agregué un mapeo de Backspace+Control a \x17. (Encontré el código ASCII para Ctrl-w usando showkey --ascii.)


4



Gracias por señalar la cosa con showkey. Así que descubrí que ALT+D para eliminar palabra en frente del cursor correspondería a \x1b\x64. - loki


Eso depende de lo que bash ve. En la interacción de terminal regular, bash no ve qué modificadores de tecla presionó, solo el carácter resultante. El retroceso ya es el mismo que el control-H, por ejemplo. Manteniendo presionado shift o control no hace 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 forma de asignar la combinación de teclas de control y retroceso a algo que bash puede diferenciar del retroceso.


3



Descubrí que mi bash no ve el retroceso. Pero puede ser que sea posible hacer que vea eso. - Adobe
@adobe, ¿qué quieres decir? Escriba 'stty' en su terminal y luego lea el manual al respecto. Si ^ H está configurado para ser su carácter de borrado, puede configurarlo para otra cosa ... si tiene una buena razón.
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, borrando 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


Solo edita tu ~/.inputrc (Es posible que necesite crear uno o copiar el que está en /etc/inputrc allí) para que contenga:

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

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

Esto también mapeará Ctrl+Borrar para eliminar la palabra al lado del cursor.


3



No funciona para mi - Jonathan


Prueba esto:

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

Opcionalmente agregue lo siguiente a ~ / .inputrc para hacerlo permanente:

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

Funciona en bash 4.3.11 en Kubuntu 14.04


1



Es poco probable que el espacio de control-retroceso sea igual que el subrayado de control. - Thomas Dickey
De todas las cosas que probé en este hilo, ¡funcionó! Usando "GNU bash, versión 4.3.48 (1) -release (x86_64-pc-linux-gnu)" en bash en windows / WSL - Markus Jevring


En la mayoría de las 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 una combinación de teclas estándar en el programa basado en texto que funcionará con vim en modo de inserción, emacs y cada caparazón.


0



He pulsado Ctrl-w para "cerrar la pestaña" en Emacs, FireFox, Krusader, así que también configuré una combinación de cierre de pestañas en Konsole. - Adobe


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 Combination tipo de columna Backspace+Ctrl. En el Output tipo de columna 0x08 (que es convencionalmente el carácter de retroceso)

Ahora debería poder asignar esa clave a backward-kill-word vía

# ~/.bashrc

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

0