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


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


¡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

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