Làm cách nào để tự động hoàn tất thiết bị đầu cuối khi có một vài tệp / thư mục?


32

Nếu tôi có một vài thư mục, như:

afoo abar

đôi khi thiết bị đầu cuối của tôi sẽ từ chối tự động hoàn thành khi tôi nhấn tab (ví dụ: "cd a" rồi tab) và in danh sách các thư mục thay thế. Đôi khi nó còn ném một âm thanh ồn ào, khó chịu. Bất kỳ ý tưởng làm thế nào để làm cho nó tự động hoàn thành trong trường hợp như thế này? Ví dụ: nó có thể hiển thị abar trước, và sau đó afoo nếu tôi nhấn lại tab. Tôi thấy đây là trường hợp trong windows, hoặc một số lời khen ngợi trong Ubuntu

Câu trả lời:


46

Một cái gì đó là cứu tinh cho tôi là có chu kỳ bash thông qua các khả năng thay vì hiển thị một danh sách ngu ngốc.

Vì bash đang sử dụng readlineđể tự động hoàn thành, hãy thêm các dòng sau vào~/.inputrc

Khi bạn đã hài lòng và đã kiểm tra kỹ lưỡng dưới giải pháp cho một ngày vài / tuần, cắt và dán (không sao chép!) Các thiết lập tương tự từ ~/.inputrcđể /etc/inputrcchứa các thiết lập trên toàn hệ thống, làm cho này dành cho tất cả người dùng trên hệ thống của bạn (bao gồm cả khách).

Các mã:

# mappings to have up and down arrow searching through history:
"\e[A": history-search-backward
"\e[B": history-search-forward
# mappings to have left and right arrow go left and right: 
"\e[C": forward-char
"\e[D": backward-char

# mapping to have [Tab] and [Shift]+[Tab] to cycle through all the possible completions:
"\t": menu-complete
"\e[Z": menu-complete-backward

sau đó exitthiết bị đầu cuối của bạn (hoặc thiết bị đầu cuối từ xa như putty) và mở lại ...

Ví dụ:

  1. Khi bạn có 3 file: file1, file2file3và bạn gõ:

    e fTabTabTab

    nó sẽ quay vòng qua:

    e file1
    e file2
    e file3

    và khi bạn muốn quay vòng ngược lại, chỉ cần nhấn Shift+Tab

  2. Khi bạn gõ:

    very-complicated-command with lots of command line parameters

    và lần tới khi bạn cần cùng một lệnh, bạn chỉ cần gõ:

    very

    và nó sẽ gõ cho bạn:

    very-complicated-command with lots of command line parameters

Điều này sẽ giúp bạn tiết kiệm rất nhiều thời gian trong bash! ;-)


2
+1, thú vị, nhưng: 1. ~/.inputrccó thể thích hợp hơn /etc/inputrcvà 2. Tôi nghĩ bạn có thể đặt bashtrực tiếp phần này: unix.stackexchange.com/q/55203/70524 , unix.stackexchange.com/a/16926/70524
muru

Điều này là khá tốt, cảm ơn (và có upvote của tôi). Có một cách phổ quát để hiển thị các tùy chọn mà nó sẽ lặp qua, kết hợp tốt nhất của cả hai thế giới? Tôi thích khả năng tab + tab với các thư mục và các lệnh con, v.v. vì vậy tôi không phải nhớ tất cả chúng (ví dụ: git branch <tab through branches>Tuy nhiên, nếu tôi có thể thấy một danh sách tab thông qua các mục của nó, điều đó sẽ rất tuyệt! lslà một tùy chọn để xem những mặt hàng nào có sẵn. Tuy nhiên, đối với các tiểu ban thì điều đó không dễ dàng hay rõ ràng.
Erik

Điều này cũng hoạt động trên PuTTy! Chỉ cần khởi động lại một lần :)
np8

@Erik: Rõ ràng, những gì bạn yêu cầu là có thể nhưng sẽ không chỉnh sửa câu trả lời của tôi để giữ mọi thứ đơn giản ở đây. (đã xóa bình luận cũ rằng điều đó là không thể)
Fabby

18

Sau lần 1 tabbạn cần chèn thêm chữ cái. Vì vậy, nếu bạn gõ

cd a

và nhấn tabbạn không nhận được gì và sau một giây tab(ngay sau đó), bạn nhận được một danh sách các tên bắt đầu avà sau đó cần chèn một fđể nó tự động hoàn thành phần còn lại để

cd atabtabftabtab

sẽ cho kết quả

cd afoo

2
IMHO: Đây là cách đúng đắn. Cá nhân tôi thấy các hành vi cửa sổ rất khó chịu. Hãy xem xét trường hợp bạn có rất nhiều tệp bắt đầu avà bạn cần tệp cuối cùng. Khi bạn vô tình nhấn tab sau khi abạn phải duyệt qua danh sách tất cả các lần hoàn thành có thể để đến đúng.
Tobias

@Tobias: khi bạn vô tình nhấn [Tab] quá sớm khi sử dụng hệ thống khác , vẫn còn [Ctrl] [K] ... ;-)
Fabby
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.