Quais são os separadores de palavras de linha de leitura?

8

Quando eu excluir uma "palavra" no Bash, ela será interrompida em determinados caracteres como _ e / . Por exemplo, se eu digitar

/foo/bar

e ative backward-kill-word (tipicamente mapeado para Alt - Backspace e / ou Ctrl - w ) , o texto restante é

/foo/

Isso não corresponde a $COMP_WORDBREAKS ou readline ' s rl_completer_word_break_characters . Como posso detectar (de preferência em um sistema em execução, em vez dos padrões no código, pois eles presumivelmente podem ser substituídos) quais caracteres são usados para determinar as quebras de palavras?

    
por l0b0 11.06.2013 / 11:16

1 resposta

7

A documentação do bash declara:

backward-kill-word (M-Rubout)

Kill the word behind point. Word boundaries are the same as those used by backward-word.

e

backward-word (M-b)

Move back to the start of the current or previous word. Words are composed of alphanumeric characters (letters and digits).

A manipulação de backward-word no Bash 4.2 é feita no código da libreadline incluído ( text.c:rl_backward_word ). A quebra de palavras é baseada em rl_alphabetic , que se baseia na função isalnum . Isso é dependente de localidade, mas não configurável diretamente no bash.

Observe que o Bash 4.0 introduziu outro tipo de "palavra" com as ações shell-forward-word e shell-backward-word (e equivalentes de eliminação). Eles quebram somente nos meta-caracteres do shell ( ()<>;&|" ) e em branco (possivelmente dependentes do código do idioma via isblank ), manipulados no código bash principal ( bashline.c ).

    
por 11.06.2013 / 11:48

Tags