ZSH salta para o final das palavras

ZSH salta para o final das palavras

Eu personalizei com sucesso o meu zshpara lidar com o que WORDCHARSeu quero. Porém, ao pular, excluir ou completar palavras automaticamente, ele salta para o início de cada palavra, eu preferiria que saltasse para o final das palavras.

Por exemplo, no comando a seguir, ao saltar usando backward-worde forward-word, o cursor salta para as posições marcadas pelos ^caracteres abaixo:

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

Eu preferiria que zsh saltasse para o final das palavras assim:

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

Isso é possível configurar?

Responder1

Aqui você vai:

# 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
}

Para esta versão do backward-word, existem alguns casos extremos em que, se o cursor estiver posicionado à direita de uma grande quantidade de caracteres que não sejam palavras, pode parecer intuitivamente que ele vai longe demais. Mas para o caso de teste apresentado acima, funciona perfeitamente.


Para opções ainda melhores de movimentação de palavras e personalização, confira meu pluginEdição Zsh.

informação relacionada