Các phân cách từ readline là gì?


9

Khi tôi xóa một "từ" trong Bash, nó sẽ dừng ở một số ký tự như _/. Ví dụ: nếu tôi gõ

/foo/bar

và kích hoạt backward-kill-word(thường được ánh xạ tới Alt- Backspacevà / hoặc Ctrl- w), văn bản còn lại là

/foo/

. Điều này không không tương ứng với $COMP_WORDBREAKShoặc readline'srl_completer_word_break_characters . Làm cách nào tôi có thể phát hiện (tốt nhất là trong một hệ thống đang chạy, thay vì mặc định trong mã, vì chúng có thể bị ghi đè) những ký tự nào được sử dụng để xác định ngắt từ?

Câu trả lời:


9

Tài liệu bash nêu:

backward-kill-word (M-Rubout)

Giết từ đằng sau điểm. Các ranh giới từ giống như các ranh giới được sử dụng bởi từ lạc hậu.

backward-word (M-b)

Di chuyển trở lại bắt đầu của từ hiện tại hoặc trước đó. Các từ được tạo thành từ các ký tự chữ và số (chữ cái và chữ số).

Việc xử lý backward-wordtrong Bash 4.2 được thực hiện trong mã libreadline kèm theo ( text.c:rl_backward_word). Việc ngắt từ dựa trên rl_alphabetic, chính nó dựa vào isalnumchức năng. Điều này phụ thuộc vào miền địa phương, nhưng không thể cấu hình trực tiếp trong bash.

Lưu ý rằng Bash 4.0 đã giới thiệu một loại "từ" khác với shell-forward-wordshell-backward-wordhành động (và tiêu diệt tương đương). Chúng chỉ phá vỡ trên các ký tự meta shell ( ()<>;&|") và khoảng trống (có thể phụ thuộc miền địa phương thông qua isblank), được xử lý trong mã bash chính ( bashline.c).


1
Tài liệu tham khảo tốt, nhưng đó là khá mơ hồ. Họ có nghĩa là [^A-Za-z0-9], [^[:alnum:]](phụ thuộc nội địa hóa) hoặc cái gì khác?
l0b0

Nói đúng ra, đó là cấu hình với các ngôn ngữ ( alnumlớp nhân vật) mặc dù điều đó cũng sẽ ảnh hưởng đến các ứng dụng khác.
Stéphane Chazelas

Ok, đã nhìn vào vị trí sai trong mã (shell-backward - *) ... Việc phân chia dựa trên isalnum, do đó, thực sự phụ thuộc vào miền địa phương và tương đương với phiên bản thứ hai của bạn, @ l0b0.
Mat

1
@Stephane Chazelas: Tôi có nghĩa là nó không thể được cấu hình thông qua các tùy chọn bash, chia sẻ lại bit đó.
Mat
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.