¿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/
SkaveRat
fuente

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

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

Ahora no
fuente
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

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


fuente
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 \^.