Quais são os separadores de palavras readline?

9

Quando eu excluo uma "palavra" no Bash, ela pára em certos caracteres como _e /. Por exemplo, se eu digitar

/foo/bar

e ativar backward-kill-word(normalmente mapeado para Alt- Backspacee / ou Ctrl- w), o texto restante é

/foo/

. Isso faz não correspondem a $COMP_WORDBREAKSou readline'srl_completer_word_break_characters . Como posso detectar (de preferência em um sistema em execução, em vez dos padrões do código, pois eles podem ser substituídos) que caracteres são usados ​​para determinar quebras de palavras?

l0b0
fonte

Respostas:

9

A documentação do bash indica:

backward-kill-word (M-Rubout)

Mate a palavra por trás do ponto. Os limites das palavras são os mesmos que os usados ​​pela palavra inversa.

E

backward-word (M-b)

Volte para o início da palavra atual ou anterior. As palavras são compostas por caracteres alfanuméricos (letras e dígitos).

A manipulação do backward-wordBash 4.2 é feita no código da linha de leitura em pacote ( text.c:rl_backward_word). A quebra da palavra é baseada rl_alphabetic, que depende da isalnumfunção. Depende da localidade, mas não é configurável diretamente no bash.

Note-se que Bash 4.0 introduziu um outro tipo "palavra" com os shell-forward-worde shell-backward-wordações (e equivalentes de matar). Eles são quebrados apenas em metacaracteres do shell ( ()<>;&|") e espaços em branco (possivelmente dependentes da localidade via isblank), manipulados no código bash principal ( bashline.c).

Esteira
fonte
1
Boas referências, mas isso é bastante vago. Eles querem dizer [^A-Za-z0-9], [^[:alnum:]](dependente de localização) ou algo mais?
L0b0
Estritamente falando, isso é configurável com localidades (a alnumclasse de caracteres), embora isso também afete outros aplicativos.
Stéphane Chazelas
Ok, estava procurando o lugar errado no código (shell-backward - *) ... A divisão é baseada em isalnum, portanto, dependente da localidade e equivalente à sua segunda versão, @ l0b0.
Mat
1
@ Stephane Chazelas: Eu quis dizer que não podia ser configurado através das opções do bash, reformulou esse pouco.
Mat