De zsh
forma predeterminada, CTRL+ wy ALT+ Backspaceparecen tener exactamente el mismo efecto.
¿Cómo puedo mantener CTRL+ wcomo está y cambiar ALT+ Backspacepara que se detenga en caracteres no alfanuméricos?
es decir, cuando el cursor está al final del siguiente comando: echo /aaa/bbb/ccc
presionar CTRL+ wdebería salir echo
, mientras que presionar ALT+ Backspacedebería salir echo /aaa/bbb/
.
ACTUALIZAR
Según la respuesta de @Thomas Dickey
, he agregado lo siguiente a mi .zshrc
:
my-backward-delete-word () {
local WORDCHARS='~!#$%^&*(){}[]<>?+;'
zle backward-delete-word
}
zle -N my-backward-delete-word
bindkey '\e^?' my-backward-delete-word
Ahora el editor de línea de comando se comporta de manera diferente a lo que esperaba.
Por ejemplo, el carácter de comilla simple '
no está enumerado en mi WORDCHARS
, por lo que cuando presiono Alt+BackSpace, backward-delete-word
debería detenerse en '
.
Esto funciona en el primer ejemplo, pero no en el segundo:
$ echo 'asdf'
$ echo '
$ echo '=asdf'
$ echo '=
$
en el segundo ejemplo, lo había echo '=
dejado en la línea de comando. Después de presionar Alt+BackSpacepor segunda vez, se comió todo, incluido echo
. Habría esperado que solo =
se lo hubieran comido, porque debería haberse detenido en '
.
¿Por qué esto no funciona como se esperaba?
Respuesta1
En realidad, no veo esto en la lista de enlaces zsh, pero si bindkey
lo muestra paratú, entonces es configurable vinculándolo a una función que usted defina.
Trabajando desde mi respuesta en
¿Cómo puedo eliminar una barra o una palabra en zsh?, Encontré esto:
zsh: detener la palabra eliminada hacia atrás en el delimitador de directorio, que apuntaba a
- Re: matar hacia atrás, dando este ejemplo de Will Yardley:
Utilizo este bit aportado por alguien de la lista (Oliver Kiddle); controlar Consulte los archivos del lunes 8 de octubre para obtener más información sobre esto: tcsh-borrar-palabra-hacia atrás () { local WORDCHARS="${WORDCHARS:s#/#}" zle palabra-borrada-hacia atrás } lo tengo obligado a controlar-W con: bindkey '^W' tcsh-borrar-palabra-hacia atrás pero puedes cambiar eso obviamente. Creo que eso es lo que estás buscando, ¿no? la variable '$WORDCHARS' es cómo zsh determina los límites de las palabras para que usted Podría agregar '/' a eso globalmente, sin embargo, esto podría afectar otras cosas. quieres dejarlo, así que prefiero esta función.
lo que conduce a ejemplos de uso
$WORDCHARS
enmodificando la división de palabras del shell zsh, así como la wiki
Entonces: puede usarla $WORDCHARS
como variable local en su propia función, definiendo las palabras que desee y vinculándolas a una clave arbitraria.
Cuando definas tu función, no olvides agregarla comomapa de teclas:
zle -N tcsh-backward-delete-word