Tự động hoàn tất thiết bị đầu cuối: chuyển qua các đề xuất


37

Tôi đã có điều này trên thiết lập Ubuntu của mình và từ khi tôi chuyển sang Fedora, tôi muốn thiết lập nó và tôi đã quên cách ... Ý tưởng rất đơn giản:

Tôi không muốn thiết bị đầu cuối hiển thị cho tôi các đề xuất khi tôi nhân đôi tab, thay vào đó tôi muốn nó chuyển qua mọi đề xuất có thể với mỗi lần nhấn vào tab... điều này cũng có thể được thực hiện trong Vim.

Vì vậy, khi tôi gõ gedit avà nhấn, tabnó sẽ hiển thị cho tôi mọi tệp với một chữ cái đầu tiên a.


Câu trả lời:


51

Đây thực sự là một tính năng đọc được gọi là menu-complete. Bạn có thể liên kết nó với tab (thay thế mặc định complete) bằng cách chạy:

bind TAB:menu-complete

Bạn có thể muốn thêm nó vào của bạn ~/.bashrc. Ngoài ra, bạn có thể định cấu hình nó cho tất cả các lần hoàn thành đường đọc (không chỉ bash) ~/.inputrc.

Bạn cũng có thể thấy bind -p(hiển thị các ràng buộc hiện tại, lưu ý hiển thị tab dưới dạng "\C-i") và bind -l(liệt kê tất cả các chức năng có thể bị ràng buộc) hữu ích, cũng như phần chỉnh sửa dòng hướng dẫn bashtài liệu của đường dẫn .


3
@vanjadjurdjevic: Chắc chắn, chỉ cần liên kết chúng với các khóa khác nhau.
derobert

4
menu-completelà tuyệt, nhưng nó ẩn danh sách của tất cả các đề xuất có thể ;-( Có thể xem cả danh sách và chu kỳ thông qua các tùy chọn không?
Ciro Santilli 改造 心 心 事件

2
@CiroSantilli 事件 法轮功 包 卓 Tôi cũng thích tính năng này trong các vỏ dựa trên readline. Hiện tại cách zsh để làm điều đó rất tuyệt vời: lần truy cập đầu tiên của tab hiển thị tất cả các khả năng, lần truy cập thứ hai của tab bắt đầu quay vòng các mục hoàn thành.
xuhdev

1
Hãy giả vờ bạn đang sử dụng cdmenu-completevà đi xe đạp qua các thư mục. Phím nào bạn nhấn để "chọn" thư mục đó và bắt đầu quay vòng nội dung của thư mục đó? Có một điều khác để thiết lập / liên kết?
Tony

1
@Tony yeah, nó sẽ chèn nó. Nhưng nếu bạn sử dụng dấu gạch chéo về phía trước, thì đó là một đường dẫn như " /usr/local//" vẫn hoàn toàn hợp lệ và sẽ bắt đầu hoàn thành các thứ bên trong menu /usr/local.
derobert

6

Bạn có thể chuyển qua menu hoàn thành trong Bash và bạn cũng có thể hiển thị menu của các mục. Không giống như trong Zsh, mục menu hiện tại sẽ không được tô sáng.

Thêm vào ~/.inputrc:

set show-all-if-ambiguous on
set show-all-if-unmodified on
set menu-complete-display-prefix on
"\t": menu-complete
"\e[Z": menu-complete-backward

Tài liệu từ man bash:

Readline Variables
    menu-complete-display-prefix (Off)
           If set to On, menu completion displays the common prefix of the
           list of possible completions (which may be empty) before cycling
           through the list.
    show-all-if-ambiguous (Off)
           This alters the default behavior of the completion functions. If
           set to On, words which have more than one possible completion
           cause the matches to be listed immediately instead of ringing
           the bell.
    show-all-if-unmodified (Off)
           This alters the default behavior of the completion functions in
           a fashion similar to show-all-if-ambiguous. If set to On, words
           which have more than one possible completion without any
           possible partial completion (the possible completions don't
           share a common prefix) cause the matches to be listed
           immediately instead of ringing the bell.

Completing
    menu-complete
          Similar to complete, but replaces the word to be completed with
          a single match from the list of possible completions. Repeated
          execution of menu-complete steps through the list of possible
          completions, inserting each match in turn. At the end of the list
          of completions, the bell is rung (subject to the setting of
          bell-style) and the original text is restored. An argument of
          n moves n positions forward in the list of matches; a negative
          argument may be used to move backward through the list. This
          command is intended to be bound to TAB, but is unbound by
          default.
    menu-complete-backward
          Identical to menu-complete, but moves backward through the list
          of possible completions, as if menu-complete had been given
          a negative argument. This command is unbound by default.
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.