Bash: nhấn thoát 4 lần


11

Khi tôi nhấn thoát 4 lần trong một bash terminal, nó sẽ hiển thị như thế này:

-bash-4.1$
Display all 2837 possibilities? (y or n)
:
!
./
[
[[
]]
{
}
411toppm
a2p
ac
accept
accton
aclocal
aclocal-1.11
acpi_listen

Tính năng này là gì và những mục này được tìm thấy như thế nào? (Trên báo chí thoát thứ hai, thiết bị đầu cuối đưa ra cảnh báo bằng âm thanh.)

Câu trả lời:


11
$ bind -p | grep 'complete$'
"\C-i": complete
"\M-\e": complete

Điều này cho thấy ràng buộc khóa mặc định của Meta+Esc(và Ctrl+i) trong chế độ chỉnh sửa dòng lệnh Emacs là chức năng Đọc complete. Các Metachính thường là Esctrên bàn phím mà không có một rõ ràng Metaquan trọng. Tài liệu Readline cho chức năng này cho biết

Cố gắng thực hiện hoàn thành trên văn bản trước điểm. Việc hoàn thành thực tế được thực hiện là dành riêng cho ứng dụng. Chẳng hạn, Bash cố gắng hoàn thành việc coi văn bản là một biến (nếu văn bản bắt đầu bằng $), tên người dùng (nếu văn bản bắt đầu bằng ~), tên máy chủ (nếu văn bản bắt đầu bằng @) hoặc lệnh (bao gồm cả bí danh và chức năng) lần lượt. Nếu không có cái nào tạo ra sự trùng khớp, thì việc hoàn thành tên tệp sẽ được thử. Mặt khác, Btb cho phép hoàn thành các chức năng và biến chương trình và chỉ thử hoàn thành tên tệp trong một số trường hợp nhất định.


Về nhận xét của bạn đối với câu trả lời của Anthon : Không, nhấn Eschai lần không giống như nhấn Tabchung (trừ khi đó là trong một chương trình ánh xạ cả hai đến cùng một hành động, như Readline làm theo mặc định). Tuy nhiên Ctrl+i giống như Tab, giống như Ctrl+[là giống như Esc. Điều này có nghĩa là bạn có thể hoàn thành Ctrl+[ Ctrl+[trong bashnếu muốn, miễn là gấp đôi Escràng buộc với completechức năng Đọc . Điều này rất hữu ích nếu bạn đang làm việc tại một thiết bị đầu cuối VT220, ví dụ, thiếu phím Escape:

Bàn phím VT220 của Đức


Kusalananda, cảm ơn bạn vì câu trả lời sâu sắc này. Về điểm cuối cùng của bạn: tại sao nhấn Eschai lần (hoặc \M-\e) không giống như Tabtrong bash, nếu cả hai đều hoàn thành?
Flow2k

1
@ Flow2k Sẽ giống nhau nếu cả Esc-Esc và Tab được liên kết với completechức năng, theo mặc định, nhưng chúng không (nói chung là các phím bấm không "giống nhau"). Bạn không thể thay thế Tab bằng Esc-Esc ở mọi nơi, chỉ trong các chương trình có khả năng đọc. Tuy nhiên, bạn có thể thay thế Tab bằng Ctrl-i hoặc Esc bằng Ctrl- [ở bất cứ đâu.
Kusalananda

Một theo dõi nếu tôi có thể: Tôi không thấy Tabtrong đầu ra của bind -p. Tại sao vậy? Có lẽ bởi vì Tab"mã hóa cứng" và không thể bị ràng buộc?
Flow2k

1
@ Flow2k Không, Tab giống hệt với Ctrl-i. Hãy tìm \C-i. Đây là một sự tương đương trên cấp độ phần cứng.
Kusalananda

8

Đó được gọi là hoàn thành tệp và nếu bạn không có bất kỳ lệnh nào trước đó trong dòng lệnh, bash sẽ cung cấp cho bạn để hoàn thành tất cả 2837 lệnh mà nó biết, cả tích hợp và các lệnh được tìm thấy trong PATH

Được trình bày theo thứ tự sắp xếp


1
Thú vị - vì vậy điều này giống như nhấn tab hai lần. Có lẽ 2 thoát = 1 tab?
Flow2k
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.