¿Cómo puedo eliminar una barra diagonal o una palabra en zsh?

18

Comportamiento bash

Acabo de migrar de basha zsh. En bash, tuve la siguiente línea ~/.inputrc.

"\e\C-?": unix-filename-rubout

Por lo tanto, Alt+ Backspaceeliminaría de nuevo a la barra diagonal anterior, lo que fue útil para cambiar las rutas ingresadas.

Además, el valor bashpredeterminado es hacer Ctrl+ w eliminar en el espacio anterior, lo cual es útil para eliminar argumentos completos (suponiendo que no tengan espacios).

Comportamiento Zsh

En zsh, ambos Alt+ Backspacey Ctrl+ whacen lo mismo. Ambos eliminan la palabra anterior, pero son demasiado liberales con lo que constituye un salto de palabra, eliminando hasta el anterior -o _. ¿Hay alguna manera de hacer que se zshcomporte de manera similar bash? Si es importante, lo he oh-my-zshinstalado.

Gavilán
fuente
1
¿Desea cambiar la definición de zsh de lo que constituye una palabra? Si es así: unix.stackexchange.com/questions/48577/… ¿ O desea definir un nuevo comando con una definición diferente de palabra?
Gilles 'SO- deja de ser malvado'
@Gilles supongo que es una combinación de ambos. En bash, usaría los dos comandos distintos regularmente: es decir, eliminar hasta el último /y eliminar hasta el último ``. Tienen diferentes funciones.
Sparhawk
1
@Gilles Entonces sí, ese enlace funciona para mi bashcomportamiento Alt + Backspace, pero todavía me gustaría el bashcomportamiento Ctrl + w (diferente) , es decir, eliminar al último espacio.
Sparhawk

Respuestas:

14

Editar: el siguiente resultado de Google después de su pregunta fue este con la misma solución: zsh: hacer que ALT + RETROCESO se detenga en caracteres no alfanuméricos

Esta respuesta fue proporcionada por /nick FoH#zsh en freenode.

backward-kill-dir () {
    local WORDCHARS=${WORDCHARS/\/}
    zle backward-kill-word
}
zle -N backward-kill-dir
bindkey '^[^?' backward-kill-dir

De esta manera, puede usar ctrl+wpara eliminar una palabra (en vim lingo) y alt+bkspcpara eliminar una palabra

JunkMechanic
fuente
¡Brillante! Gracias por tomarse el tiempo para investigar y responder.
Gavilán
Re Google: excepto que hice mi pregunta hace nueve meses, y me hicieron la suya hace menos de un mes.
Sparhawk
1
el tiempo es solo una construcción social hombre ... pero en serio, punto justo.
JunkMechanic
19

Aquí se hizo una pregunta similar: zsh: stop backward-kill-word en delimitador de directorio

y una solución viable dada: agregue esta configuración a su zshrc:

autoload -U select-word-style
select-word-style bash
Thomas Dickey
fuente
Gracias por la respuesta. Sin embargo, ninguna de esas respuestas funciona para mí. (Específicamente, el que usted citó no cambia). Posiblemente, es porque lo he oh-my-zshinstalado. En cualquier caso, esto no parece abordar las dos funciones y enlaces de teclas diferentes según mi pregunta. (Y si mi pregunta fuera engañar, debería cerrarse como un engaño. Lo cual no es)
Sparhawk
1
Necesita ajustar la variable WORDCHARS. En zsh es fácilvared WORDCHARS
Jshura
Solo sería un duplicado si lo comparáramos con una pregunta respondida en este foro.
Thomas Dickey
@ThomasDickey Oh sí, disculpas, no me di cuenta de que había intercambiado sitios de SE.
Sparhawk
@Jshura No, según la pregunta, me gustaría dos funciones diferentes, que es posible en bash.
Sparhawk
5

Ampliando la respuesta de JunkMechanic , quería que

  • los accesos directos zsh existentes ( CtrlW, Ctrly Ctrl) funcionan como en los valores predeterminados de zsh
  • Altlos accesos directos basados ​​en ( AltW, Alty Alt) funcionan de manera similar, pero "de grano más fino", por ejemplo, hasta el más cercano/

Esto es lo que uso ahora:

# Alt+Backspace
backward-kill-dir () {
    local WORDCHARS=${WORDCHARS/\/}
    zle backward-kill-word
}
zle -N backward-kill-dir
bindkey '^[^?' backward-kill-dir


# Alt+Left
backward-word-dir () {
    local WORDCHARS=${WORDCHARS/\/}
    zle backward-word
}
zle -N backward-word-dir
bindkey "^[[1;3D" backward-word-dir

# Alt+Right
forward-word-dir () {
    local WORDCHARS=${WORDCHARS/\/}
    zle forward-word
}
zle -N forward-word-dir
bindkey "^[[1;3C" forward-word-dir
nh2
fuente