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