Bash autocomplete: danh sách các tệp đầu tiên sau đó chuyển qua chúng


27

Có thể định cấu hình bash theo cách mà trên tab đầu tiên tự động hoàn tất, nó liệt kê tất cả các tệp có thể và trên các chu kỳ tiếp theo thông qua các lựa chọn?

Cả hai tùy chọn đều dễ dàng thực hiện riêng biệt và tôi có thể liên kết chúng với các khóa khác nhau, nhưng ở trên sẽ hoàn hảo, nhưng tôi không thể tìm thấy bất cứ điều gì về nó trên mạng.


3
Đã được một thời gian kể từ khi tôi sử dụng ZSH, nhưng tôi tin rằng các chức năng tự động hoàn thành của nó như thế này.
jordanm

1
@jordanm Có vẻ như là một tùy chọn nếu không có gì khác hoạt động, nhưng điều đó cũng đòi hỏi phải cập nhật mọi thứ từ .bashrc, v.v. sang tương đương ZSH, điều mà tôi khá muốn tránh.
Voo

Câu trả lời:


31

Điều này có vẻ gần với những gì bạn muốn:

bind "TAB:menu-complete"
bind "set show-all-if-ambiguous on"

1
Gần như hoàn hảo, ngoài lỗ hổng nhỏ mà nó cũng tự động hoàn thành trên tab đầu tiên, điều này có thể hơi khó chịu nếu tôi chỉ cố gắng tìm ra tên chính xác (nghĩa là tôi phải xóa thêm một chút ký tự nếu tôi muốn thay đổi sau đó), nhưng tôi khá sẵn lòng sống với điều đó.
Voo

1
Làm thế nào điều này có thể dễ dàng được hoàn tác?
dingalapadum

1
bind "TAB:complete"; bind "set show-all-if-ambiguous off"
Jim Paris

13
@Voo thêm dòng thứ ba bind "set menu-complete-display-prefix on"sẽ chỉ liệt kê các ứng cử viên trên tab đầu tiên mà không tự động hoàn thành.
Naitree

2
@Naitree không thể nâng cao đề xuất của bạn đủ. Nó hoạt động và IS là như vậy, tốt hơn nhiều so với hành vi bash mặc định. Cảm ơn bạn.
JBeurer

1

Đây là những gì tôi sử dụng. Theo như tôi có thể nói nó làm chính xác những gì bạn muốn.

# make tab cycle through commands after listing
bind '"\t":menu-complete'
bind "set show-all-if-ambiguous on"
bind "set completion-ignore-case on"
bind "set menu-complete-display-prefix on"

Điều này hoạt động trên Mac (10.13 & 10.14) và Ubuntu (16.04 & 18.04).


0

Bạn đã cân nhắc chưa? Nó được tham chiếu tại Superuser ...

[[ $- = *i* ]] && bind TAB:menu-complete

1
menu-completechỉ là một nửa của những gì câu hỏi đang hỏi. Như câu hỏi nói, "[b] oth tùy chọn rất dễ thực hiện riêng" .
jw013

Có, tôi biết cách thay đổi hành vi thành một trong hai tùy chọn, nhưng đó là phần dễ dàng. Vấn đề thực sự là làm thế nào để kết hợp cả hai thành một.
Voo
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.