Diferentes comandos bash usam diferentes noções de palavra. Verifique a descrição de cada comando no manual .
C-w
mata para o espaço em branco anterior. M-DEL
(geralmente Alt + BackSpace ) mata para o limite de palavras anterior, onde as palavras contêm apenas letras e dígitos (o mesmo que M-b
e M-f
), e M-d
mata de maneira semelhante.
O Bash usa a biblioteca Readline para processar a entrada do usuário e pode ser configurado via ~/.inputrc
ou através do bind
incorporado %código%. Você pode vincular uma chave a um comando readline diferente, se desejar. Você também pode usar ~/.bashrc
para ligar uma chave a uma função bash que modifica a variável bind -x
.
Por exemplo, para fazer READLINE_LINE
matar uma palavra shell, vincule-a a M-d
no seu shell-kill-word
:
bind '"\M-d": shell-kill-word'
Para fazer com que .bashrc
exclua uma palavra delimitada por espaço em branco, não há nenhuma função interna, portanto, é necessário escrever uma macro ou uma função de shell. Como não há comando de movimento que passe por palavras delimitadas por espaços em branco, você precisa de uma função pelo menos para essa parte.
delete_whitespace_word () {
local suffix="${READLINE_LINE:$READLINE_POINT}"
if [[ $suffix =~ ^[[:space:]]*[^[:space:]]+ ]]; then
local -i s=READLINE_POINT+${#BASH_REMATCH[0]}
READLINE_LINE="${READLINE_LINE:0:$READLINE_POINT}${READLINE_LINE:$s}"
fi
}
bind -x '"\ed": delete_whitespace_word'
Para tornar M-d
kill uma palavra delimitada por espaço em branco é mais complicada porque, até onde eu sei, não há como acessar o kill ring a partir do código bash. Então, isso requer uma função para encontrar o fim da porção a ser eliminada, e uma macro para seguir isso pela matança real.
forward_whitespace_word () {
local suffix="${READLINE_LINE:$READLINE_POINT}"
if [[ $suffix =~ ^[[:space:]]*[^[:space:]]+ ]]; then
((READLINE_POINT += ${#BASH_REMATCH[0]}))
else
READLINE_POINT=${#READLINE_LINE}
fi
}
bind -x '"\C-xF": forward_whitespace_word'
bind '"\C-x\C-w": kill-region'
bind '"\ed": "\e \C-xF\C-x\C-w"'
Tudo isso seria muito mais fácil no zsh.