Wie kann ich einen Schrägstrich oder ein Wort in zsh löschen?

16

Bash-Verhalten

Ich bin gerade von bashnach migriert zsh. In bashhatte ich die folgende Zeile in ~/.inputrc.

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

Daher würde Alt+ Backspacezum vorherigen Schrägstrich zurückkehren, was zum Ändern der eingegebenen Pfade nützlich war.

Außerdem wird bashstandardmäßig Ctrl+ w löschen auf das vorherige Leerzeichen gesetzt. Dies ist nützlich, um ganze Argumente zu löschen (vorausgesetzt, sie haben keine Leerzeichen).

Zsh Verhalten

In machen zshsowohl Alt+ Backspaceals auch Ctrl+ wdasselbe. Beide löschen das vorherige Wort, aber sie sind zu liberal mit dem, was einen Wortumbruch ausmacht, und löschen bis zum vorherigen -oder _. Gibt es eine Möglichkeit, zshsich ähnlich zu verhalten bash? Wenn es wichtig ist, habe ich oh-my-zshinstalliert.

Sparhawk
quelle
1
Möchten Sie die Definition von zsh für ein Wort ändern? Wenn ja: unix.stackexchange.com/questions/48577/… Oder möchten Sie einen neuen Befehl mit einer anderen Wortdefinition definieren?
Gilles 'SO - hör auf böse zu sein'
@ Gilles Ich denke eine Kombination von beiden. In bash würde ich regelmäßig die zwei unterschiedlichen Befehle verwenden: dh bis zum letzten /löschen und bis zum letzten löschen ``. Sie haben unterschiedliche Funktionen.
Sparhawk
1
@ Gilles Also ja, dieser Link funktioniert für mein bashähnliches Alt + Backspace-Verhalten, aber ich möchte immer noch das (andere) bashähnliche Strg + w-Verhalten, dh bis zum letzten Leerzeichen löschen.
Sparhawk

Antworten:

14

Bearbeiten: Das nächste Google-Ergebnis nach Ihrer Frage war dieses mit derselben Lösung: zsh: ALT + BACKSPACE bei nicht alphanumerischen Zeichen anhalten lassen

Diese Antwort wurde /nick FoHvon #zsh auf freenode bereitgestellt .

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

Auf diese Weise können Sie ctrl+wein Wort (in vim lingo) alt+bkspclöschen und ein Wort löschen

JunkMechanic
quelle
Brillant! Vielen Dank, dass Sie sich die Zeit genommen haben, Nachforschungen anzustellen und zu antworten.
Sparhawk
Zu Google: außer ich habe meine Frage vor neun Monaten gestellt und sie haben ihre vor weniger als einem Monat gestellt.
Sparhawk
1
Zeit ist nur ein soziales Konstrukt! .. aber im Ernst, fairer Punkt.
JunkMechanic
18

Eine ähnliche Frage wurde hier gestellt: zsh: Stop Backward-Kill-Word auf Verzeichnisbegrenzer

und eine praktikable Lösung: Fügen Sie diese Einstellungen zu Ihrem zshrc hinzu:

autoload -U select-word-style
select-word-style bash
Thomas Dickey
quelle
Danke für die Antwort. Keine dieser Antworten funktioniert jedoch für mich. (Insbesondere der von Ihnen angegebene ändert nichts.) Möglicherweise liegt es daran, dass ich oh-my-zshinstalliert habe. Auf jeden Fall scheint dies nicht die zwei unterschiedlichen Funktionen und Tastenkombinationen gemäß meiner Frage anzusprechen. (Und wenn meine Frage betrogen wäre, sollte sie als betrogen geschlossen werden. Was es nicht ist.)
Sparhawk
1
Sie müssen die Variable WORDCHARS optimieren. In zsh ist es einfachvared WORDCHARS
Jshura
Es wäre nur ein Duplikat, wenn wir es mit einer beantworteten Frage in diesem Forum vergleichen würden.
Thomas Dickey
@ThomasDickey Oh ja, Entschuldigung, ich habe nicht bemerkt, dass ich SE-Sites getauscht habe.
Sparhawk
@Jshura Nein, laut der Frage möchte ich zwei verschiedene Funktionen, die in möglich sind bash.
Sparhawk
5

Ich wollte die Antwort von JunkMechanic erweitern und wollte das

  • Vorhandene zsh-Verknüpfungen ( CtrlW, Ctrlund Ctrl) funktionieren wie in den zsh-Standardeinstellungen
  • Alt-basierte Verknüpfungen ( AltW, Altund Alt) funktionieren ähnlich, aber "feinkörniger", z. B. bis zum nächsten/

Folgendes verwende ich jetzt:

# 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;3C" forward-word-dir

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