Làm cách nào để bash ký tự đại diện tự động hoàn thành?


10

Nếu tôi có thư mục chứa các tập tin

foo.bar.a.cat
foo.bar.a.hat

và tôi gõ ls f+ TABbash shell autocompletes to ls foo.bar.a.. Nếu tôi gõ ls *bar*+ TABtôi muốn nó tự động hoàn thành *bar*.a.. Điều này có thể không?

Điều này có vẻ tương tự như câu hỏi

Làm cách nào để bật tab hoàn thành ký tự đại diện trong bash?

nhưng câu trả lời được đề xuất, "nó hoạt động tốt cho tôi", thì không. Tôi cũng đã thử TAB TAB, không có hiệu quả. Lệnh `` bash --version givesGNU bash, phiên bản 4.2.37 (1) -release (x86_64-pc-linux-gnu) `.

Câu trả lời:


14

Bạn muốn một trong hai:

chèn hoàn thành

ALT* cho 'chèn tất cả các hoàn thành'

Với điều này, một thư mục chứa tên tệp 'aa ab ac ad'
ls a*theo sau alt + *sẽ hoàn thànhls aa ab ac ad

Mục nhập trang Man về ràng buộc:

chèn hoàn thành (M- *)

Chèn tất cả các phần hoàn thành của văn bản trước điểm có thể được tạo bởi các phần hoàn thành có thể.

toàn cầu mở rộng

Trên một số hệ thống, phần trên sẽ không hoạt động với wildchars, phần sau không hoạt động trên các hệ thống như vậy đối với tôi:

ctrlx, *(kết hợp hai nét)

Ví dụ: Tôi đã điền một thư mục với:

touch {a,b,c,d,e,f}{1,2,3,4,5,6,7,8,9,0}00{a,b,c,d,f,e}

Sau đó tôi ls *100*theo sau ctrl + x, *, biến đường đọc của tôi thành:

ls a100a a100b a100c a100d a100e a100f b100a b100b b100c b100d b100e b100f c100a c100b c100c c100d c100e c100f d100a d100b d100c d100d d100e d100f e100a e100b e100c e100d e100e e100f f100a f100b f100c f100d f100e f100f

Mục nhập trang Man để ràng buộc:

toàn cầu mở rộng (Cx *)

Từ trước điểm được coi là một mẫu để mở rộng tên đường dẫn và danh sách các tên tệp phù hợp được chèn vào, thay thế từ đó. Nếu một đối số số được cung cấp, '*' sẽ được thêm vào trước khi mở rộng tên đường dẫn.

Trang nam


Điều này không hoạt động (ít nhất là đối với tôi). Tạo các tệp touch aa ab ac advà gõ ls atheo sau là alt+*đưa ra danh sách, nhưng thực hiện với ls a*không. Các ký tự đại diện là điểm của câu hỏi.
Móc vào

@Hooked Điều này làm việc cho tôi GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu)GNU bash, version 4.2.0(1)-release (x86_64--netbsd)không GNU bash, version 4.2.45(2)-release (i386-apple-darwin12.2.0). Và bằng cách làm việc, tôi có nghĩa là nó nộp trong văn bản. Sẽ kiểm tra các tập tin conf của tôi để xem nếu tôi có thêm một cái gì đó.
demure

Thật lạ, tại sao một thứ đơn giản như vậy lại thay đổi từ phiên bản này sang phiên bản khác? Bất kỳ ý tưởng về cách kích hoạt nó hoặc nó được tích hợp vào thời gian biên dịch?
Móc vào

@Hooked Tôi là một chút bối rối quá ... Nó cũng không thành công trên pi mâm xôi của tôi GNU bash, version 4.2.37(1)-release (arm-unknown-linux-gnueabihf)(raspbian)
kín đáo

@Hooked Tìm thấy ràng buộc tiêu chuẩn hoạt động trên các hệ thống mà lần đầu tiên không có, đối với tôi.
demure

8

Hãy thử thêm phần này vào ~ / .inputrc:

set show-all-if-ambiguous on

show-all-if-mơ hồ làm cho việc nhấn tab một lần (thay vì hai lần) liệt kê tất cả các lần hoàn thành. Nó cũng làm cho tab đầu tiên nhấn chèn tiền tố được chia sẻ của biểu thức toàn cục.

$ touch 1.0.{1,2}
$ echo *0* # I pressed tab once here
1.0.1  1.0.2
$ echo 1.0.

global-Complete-word (\ eg) cũng sẽ hoàn thành *0(không có *ở cuối) 1.0.. Nó cũng hoàn thành ví dụ /System/Library/Launch*/*Findeđể /System/Library/LaunchAgents/com.apple.Finder.plist.

Nếu bạn muốn chuyển đổi *sang 1.0.1 1.0.2trong ví dụ trên, hãy sử dụng hoặc hoàn thành chèn (\ e *) hoặc toàn cầu mở rộng (\ Cx *).


4

Vấn đề này là do lỗi trong gói "bash-hoàn thành".

Khi gói không được cài đặt, bash sẽ hoàn thành mặc định, đây là một công cụ hoàn thành tên tệp tổng quát khá tốt.

Gói "hoàn thành bash" được cho là nhìn vào phần còn lại của dòng và "thông minh" về các danh sách mà nó tạo ra. Tuy nhiên, nó không thể nhân đôi việc mở rộng "toàn cầu" thành công.

Cá nhân, tôi nghĩ rằng gói đang cố gắng quá nhiều và cuối cùng chỉ có thể sử dụng được bởi "người dùng thông thường ngu ngốc nhất".

Mặc dù, trước khi xóa nó, bạn có thể muốn kiểm tra phần trên cùng của tệp "/ usr / share / bash-xong / bash_completion" để biết các bổ sung hữu ích cho .bashrc của bạn để 'điều chỉnh tổng thể' cho việc hoàn thành bash tích hợp.

BTW: Nó có hơn một trăm lỗi đã đăng nhập ... https://bugs.debian.org/cgi-bin/pkgreport.cgi?package=bash-completion


$ sudo yum xóa bash-hoàn thành #fixed vấn đề cho tôi
user2449151
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.