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?

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).


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.