ATUALIZAR

ATUALIZAR

Por zshpadrão, CTRL+ we ALT+ Backspaceparecem ter exatamente o mesmo efeito.

Como posso manter CTRL+ wcomo está e alterar ALT+ Backspacepara que pare em caracteres não alfanuméricos.

ou seja, quando o cursor está no final do seguinte comando:, echo /aaa/bbb/cccpressionar CTRL+ wdeve sair echo, enquanto pressionar ALT+ Backspacedeve sair echo /aaa/bbb/.

ATUALIZAR

com base na resposta de @Thomas Dickey, adicionei o seguinte ao meu .zshrc:

 my-backward-delete-word () {
    local WORDCHARS='~!#$%^&*(){}[]<>?+;'
    zle backward-delete-word
 }
 zle -N my-backward-delete-word

 bindkey    '\e^?' my-backward-delete-word

Agora o editor de linha de comando se comporta de maneira diferente do que eu esperava.

Por exemplo, o caractere de aspas simples 'não é enumerado em my WORDCHARS, portanto, quando pressiono Alt+BackSpace, backward-delete-worddeve parar em '.

Isso funciona no primeiro exemplo, mas não no segundo:

$ echo 'asdf'
$ echo '

$ echo '=asdf'
$ echo '=
$

no segundo exemplo, deixei echo '=a linha de comando. Depois de pressionar Alt+BackSpacepela segunda vez, tudo foi comido, inclusive echo. Eu teria esperado que apenas =deveria ter sido comido, porque deveria ter parado em '.

Por que isso não está funcionando conforme o esperado?

Responder1

Na verdade, não vejo isso listado nas ligações zsh, mas se bindkeyfor mostrado paravocê, então ele será configurável vinculando-se a uma função que você definir.

Trabalhando a partir da minha resposta em

    eu uso esse trecho contribuído por alguém da lista (Oliver Kiddle); verificar
    os arquivos de segunda-feira, 8 de outubro para mais informações sobre isso:

    tcsh-backward-delete-word () {
      localWORDCHARS="${WORDCHARS:s#/#}"
      zle para trás-excluir palavra
    }

    eu tenho isso vinculado ao control-W com:
    bindkey '^W' tcsh-backward-delete-word

    mas você pode mudar isso obviamente.

    acho que é isso que você está procurando, não?

    a variável '$WORDCHARS' é como o zsh determina os limites das palavras para que você
    poderia adicionar '/' a isso globalmente, no entanto, isso pode afetar outras coisas
    você quer deixar para lá, então eu prefiro essa função.

Então: você pode usar $WORDCHARScomo variável local em sua própria função, definindo palavras como quiser e vinculando-as a uma chave arbitrária.

Ao definir sua função, não se esqueça de adicioná-la como ummapa de teclado:

zle -N tcsh-backward-delete-word

informação relacionada