Por zsh
padrã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/ccc
pressionar 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-word
deve 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 bindkey
for mostrado paravocê, então ele será configurável vinculando-se a uma função que você definir.
Trabalhando a partir da minha resposta em
Como posso excluir uma barra ou palavra em zsh?, Eu achei isto:
zsh: pare a palavra de eliminação reversa no delimitador de diretório, que apontou
- Re: matar para trás, dando este exemplo de Will Yardley:
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.
o que leva a exemplos de uso
$WORDCHARS
emmodificando a divisão do Word do shell zsh, bem como o wiki
Então: você pode usar $WORDCHARS
como 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