ZSH zum Ende der Wörter springen

ZSH zum Ende der Wörter springen

Ich habe meins erfolgreich angepasst, zshdamit es genau so funktioniert, wie WORDCHARSich es möchte. Beim Springen, Löschen oder automatischen Vervollständigen von Wörtern springt es jedoch an den Anfang jedes Worts. Mir wäre es lieber, wenn es stattdessen ans Ende der Wörter springen würde.

Wenn Sie beispielsweise im folgenden Befehl mit backward-wordund springen forward-word, springt der Cursor an die Positionen, die durch die ^folgenden Zeichen markiert sind:

$ kubectl --context stage --namespace kube-system get pods
  ^         ^       ^       ^         ^    ^      ^   ^   ^

Mir wäre es viel lieber, wenn zsh stattdessen wie folgt an das Ende der Wörter springen würde:

$ kubectl --context stage --namespace kube-system get pods
  ^      ^         ^     ^           ^           ^   ^    ^

Ist das konfigurierbar?

Antwort1

Bitte schön:

# Replace `forward-word` with `emacs-forward-word`. Problem solved.
zle -A emacs-forward-word forward-word

# For `backward-word`, it's a bit more complex. We'll have to 
# create a new widget for this.
zle -N backward-word backward-word-end
backward-word-end() {
  # Move to the beginning of the current word.
  zle .backward-word

  # If we're at the beginning of the buffer, we don't need to do 
  # anything else.
  (( CURSOR )) ||
      return
    
  # Otherwise, move to the end of the word before the current one.
  zle .backward-word
  zle .emacs-forward-word
}

Bei dieser Version von backward-wordgibt es einige Randfälle, bei denen es sich intuitiv so anfühlen kann, als würde der Cursor etwas zu weit springen, wenn er rechts neben einer großen Anzahl von Nicht-Wortzeichen steht. Aber für den Testfall, den Sie oben vorgestellt haben, funktioniert es genau richtig.


Für noch bessere Wortbewegungs- und Anpassungsoptionen schau dir mein Plugin anZsh Bearbeiten.

verwandte Informationen