Apa pemisah kata readline?

9

Ketika saya menghapus "kata" di Bash, itu akan berhenti pada karakter tertentu seperti _dan /. Misalnya, jika saya mengetik

/foo/bar

dan mengaktifkan backward-kill-word(biasanya dipetakan ke Alt- Backspacedan / atau Ctrl- w), teks yang tersisa adalah

/foo/

. Ini tidak tidak sesuai dengan $COMP_WORDBREAKSatau readline'srl_completer_word_break_characters . Bagaimana saya bisa mendeteksi (lebih baik dalam sistem yang sedang berjalan, daripada default dalam kode, karena mereka mungkin dapat diganti) karakter mana yang digunakan untuk menentukan kata istirahat?

l0b0
sumber

Jawaban:

9

Dokumentasi bash menyatakan:

backward-kill-word (M-Rubout)

Bunuh kata di belakang titik. Batas kata sama dengan yang digunakan oleh kata mundur.

Dan

backward-word (M-b)

Pindah kembali ke awal kata saat ini atau sebelumnya. Kata-kata terdiri dari karakter alfanumerik (huruf dan angka).

Penanganan backward-worddalam Bash 4.2 dilakukan dalam kode libreadline yang dibundel ( text.c:rl_backward_word). Kata break didasarkan pada rl_alphabetic, yang dengan sendirinya bergantung pada isalnumfungsinya. Ini bergantung pada lokal, tetapi tidak dapat dikonfigurasi secara langsung di bash.

Perhatikan bahwa Bash 4.0 memperkenalkan jenis "kata" lain dengan shell-forward-worddan shell-backward-wordtindakan (dan membunuh yang setara). Ini hanya memecah pada shell meta-karakter ( ()<>;&|") dan kosong (mungkin tergantung lokal melalui isblank), ditangani dalam kode bash utama ( bashline.c).

Tikar
sumber
1
Referensi yang bagus, tapi itu agak kabur. Apakah maksudnya [^A-Za-z0-9], [^[:alnum:]](tergantung lokalisasi) atau sesuatu yang lain?
l0b0
Sebenarnya, itu dapat dikonfigurasi dengan locales ( alnumkelas karakter) meskipun itu akan mempengaruhi aplikasi lain juga.
Stéphane Chazelas
Ok, sedang melihat tempat yang salah dalam kode (shell-backward - *) ... Perpecahan ini berdasarkan isalnum, jadi memang tergantung pada lokal dan setara dengan versi kedua Anda, @ l0b0.
Mat
1
@Stephane Chazelas: Maksud saya itu tidak bisa dikonfigurasikan melalui opsi bash, diulangi sedikit.
Mat