Come posso cancellare una barra o una parola in zsh?


19

Comportamento Bash

Sono appena migrato da basha zsh. In bash, ho avuto la seguente riga in ~/.inputrc.

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

Pertanto, Alt+ Backspaceverrebbe eliminato di nuovo alla barra precedente, utile per modificare i percorsi immessi.

Inoltre, per bashimpostazione predefinita è Ctrl+ w cancella nello spazio precedente, utile per eliminare interi argomenti (presumendo che non abbiano spazi).

Comportamento Zsh

In zsh, sia Alt+ Backspaceche Ctrl+ wfanno la stessa cosa. Entrambi eliminano la parola precedente, ma sono troppo liberali con ciò che costituisce una rottura di parole, cancellando fino alla precedente -o _. C'è un modo per zshcomportarsi in modo simile a bash? Se è importante, ho oh-my-zshinstallato.


1
Vuoi cambiare la definizione di zsh di ciò che costituisce una parola? In tal caso: unix.stackexchange.com/questions/48577/… O vuoi definire un nuovo comando con una diversa definizione di parola?
Gilles 'SO- smetti di essere malvagio' il

@Gilles Immagino una combinazione di entrambi. In bash, userei regolarmente i due comandi distinti: cioè cancella fino all'ultimo /e cancella fino all'ultimo ''. Hanno diverse funzioni.
Sparhawk,

1
@Gilles Quindi sì, quel collegamento funziona per il mio bashcomportamento Alt + Backspace simile a quello, ma mi piacerebbe comunque il bashcomportamento (diverso) simile a Ctrl + w, ovvero eliminare fino all'ultimo spazio.
Sparhawk,

Risposte:


14

Modifica: il prossimo risultato di Google dopo la tua domanda è stato questo con la stessa soluzione: zsh: fa in modo che ALT + BACKSPACE si fermi su caratteri non alfanumerici

Questa risposta è stata fornita da /nick FoH#zsh su freenode.

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

In questo modo è possibile utilizzare ctrl+wper eliminare una parola (in vim lingo) e alt+bkspcper eliminare una parola


Brillante! Grazie per aver dedicato del tempo per indagare e rispondere.
Sparhawk,

R: Google, tranne che ho fatto la mia domanda nove mesi fa, e loro hanno posto la loro meno di un mese fa.
Sparhawk,

1
il tempo è solo un uomo di costruzione sociale! .. ma seriamente, punto giusto.
JunkMechanic,

20

Una domanda simile è stata posta qui: zsh: stop backward-kill-word sul delimitatore di directory

e una soluzione praticabile fornita: aggiungi queste impostazioni al tuo zshrc:

autoload -U select-word-style
select-word-style bash

Grazie per la risposta. Tuttavia, nessuna di queste risposte funziona per me. (In particolare, quello che hai citato non cambia.) Forse è perché l'ho oh-my-zshinstallato. In ogni caso, questo non sembra indirizzare le due diverse funzioni e combinazioni di tasti secondo la mia domanda. (E se la mia domanda fosse ingannevole, dovrebbe essere chiusa come ingannevole. Che non lo è.)
Sparhawk,

1
È necessario modificare la variabile WORDCHARS. In zsh è facilevared WORDCHARS
Jshura

Sarebbe solo un duplicato se lo abbinassimo a una domanda con risposta in questo forum.
Thomas Dickey,

@ThomasDickey Oh sì, mi scuso, non ho notato che avevo scambiato i siti SE.
Sparhawk,

@Jshura No, come per la domanda, vorrei due diverse funzioni, che è possibile in bash.
Sparhawk,

5

Espandendo la risposta di JunkMechanic , lo volevo

  • scorciatoie zsh esistente ( CtrlW, Ctrle Ctrl) lavora come in default zsh
  • Altscorciatoie basati ( AltW, Alte Alt) il lavoro in modo simile, ma "più sofistica", ad esempio, fino al più vicino/

Ecco cosa uso ora:

# 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.