Quali sono i separatori di parole readline?


9

Quando elimino una "parola" in Bash, si fermerà su alcuni caratteri come _e /. Ad esempio, se scrivo

/foo/bar

e attivare backward-kill-word(tipicamente mappato su Alt- Backspacee / o Ctrl- w), il testo rimanente è

/foo/

. Questo non corrisponde a $COMP_WORDBREAKSo readline'srl_completer_word_break_characters . Come posso rilevare (preferibilmente in un sistema in esecuzione, piuttosto che i valori predefiniti nel codice, dal momento che presumibilmente possono essere sovrascritti) quali caratteri vengono utilizzati per determinare le interruzioni di parole?

Risposte:


9

La documentazione di bash afferma:

backward-kill-word (M-Rubout)

Uccidi la parola dietro il punto. I confini delle parole sono gli stessi di quelli usati dalla parola all'indietro.

E

backward-word (M-b)

Torna all'inizio della parola corrente o precedente. Le parole sono composte da caratteri alfanumerici (lettere e cifre).

La gestione di backward-wordin Bash 4.2 viene eseguita nel codice libreadline in bundle ( text.c:rl_backward_word). La parola break si basa su rl_alphabetic, che a sua volta si basa sulla isalnumfunzione. Questo dipende dalle impostazioni locali, ma non può essere configurato direttamente in bash.

Si noti che Bash 4.0 ha introdotto un altro tipo di "parola" con le shell-forward-worde shell-backward-wordazioni (ed equivalenti kill). Questi si interrompono solo sui meta-caratteri della shell ( ()<>;&|") e sugli spazi (possibilmente dipendenti dalla locale tramite isblank), gestiti nel codice bash principale ( bashline.c).


1
Buoni riferimenti, ma è piuttosto vago. Cosa significano [^A-Za-z0-9], [^[:alnum:]](localizzazione dipendente) o qualcos'altro?
10

A rigor di termini, è configurabile con le impostazioni locali (la alnumclasse di caratteri) sebbene ciò influirebbe anche su altre applicazioni.
Stéphane Chazelas,

Ok, stavo guardando nel posto sbagliato nel codice (shell-backward - *) ... La suddivisione è basata isalnum, quindi effettivamente dipendente dalla locale ed equivalente alla tua seconda versione, @ l0b0.
Mat

1
@Stephane Chazelas: intendevo dire che non poteva essere configurato tramite le opzioni bash, riformulato quel bit.
Mat
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.