¿Es posible configurar ctrl-w (eliminar palabra)?


40

Normalmente, Ctrl+ Welimina de nuevo al último espacio en blanco.

¿Es posible configurarlo para usar caracteres adicionales, como /?

Editar: para ser más claro: no quiero configurar la clave para ello, quiero que la eliminación también se detenga /.

Ejemplo:

vim /foo/bar^W
vim /foo/

Respuestas:


29

Lo que funcionó para mí fue agregar las siguientes líneas a mi .bashrc

stty werase undef
bind '\C-w:unix-filename-rubout'

Necesita la línea undef; de lo contrario, bash ignora su nuevo enlace para C-w


3
Cabe señalar que le stty werase undefimpedirá usar Cw en cualquier programa (bind le permitirá usarlo en readline)
— 0fnt

24

Debería poder usar Esc, luego retroceder para borrar palabras delimitadas por barras.

Puede cambiar esto poniendo esto en usted .bashrc:

bind '\C-f:unix-filename-rubout'

Ahora usa Ctrl+f para hacer lo que quieras.


1
gracias, ese es el comando que funciona. ¿Hay alguna manera de sobrescribir el comando de Cw? Si lo cambio a C-w:..., el comportamiento predeterminado de eliminar al siguiente espacio todavía se activa. En una tecla diferente (como F) si funciona bien.
— SkaveRat

No creo que ctrl-w sea administrado solo por el shell. Puede ser administrado por el tty también. ¿Qué muestra tu configuración de tty stty -a? ¿tienes control-w como char predeterminado para werase? Si elimina esa configuración de tty, con comman stty werase undef, ¿bash funciona como se esperaba?
— eppesuig

23

Para este problema específico, también puede usar:

Alt + Backspace

$ cd /home/me/test/a_dir/    # Alt + Backspace
$ cd /home/me/test/          # Alt + Backspace
$ cd /home/me/               # ...

Buena referencia: aventuras con el borrado de palabras de bash


2
¡Increíble! La mayoría de las otras respuestas sugieren volver a vincular Ctrl+wo Ctrl + b o algo así unix-filename-rubout, pero es mucho mejor que haya un enlace incorporado: M-backspace (Alt + backspace o Esc backspace)
— Colin D Bennett

No funcionó para mí
— ethanjyx

@ethanjyx oh. Estoy trabajando en GNU bash. ¿Estás también en este sabor?
— fedorqui

7

Con bash puede obtener el efecto deseado, poniendo lo siguiente en su archivo ~ / .bashrc:

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

Presione CTRL+Vy su combinación de teclas para ver cómo se ve para su emulador de terminal. Por ejemplo CTRL+bksppuede ser interpretado diferente en diferentes terminales por ejemplo ^Ho ^?. El ^personaje es el mismo que CTRL.


Creo que no fui lo suficientemente específico con mi pregunta. Quería tener /un carácter de detención adicional, no una forma de vincular el comando delete-word-command en otra tecla. Edité mi pregunta
— SkaveRat

Usando backward-kill-word enlazado a \ Cw, borrará hacia atrás hasta la última barra diagonal dada si está presente en una palabra y borrará palabras delimitadas por espacios en blanco. ¿Esto no es lo que querías?

Mi sistema usa ^F, pero usar "\^F"en el script anterior no funciona
— SkaveRat

1
El Ctrlpersonaje está escrito \Cen el guión y no \^.
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.