Trường hợp hoàn thành tab không nhạy cảm trong Bash


141

Có cách nào để làm cho tab Bash hoàn thành trường hợp không nhạy cảm không?

$ bash --version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin10.0)
Copyright (C) 2007 Free Software Foundation, Inc.

Tôi đang sử dụng Mac OS X 10.6

Câu trả lời:


170

Cập nhật văn bản /etc/inputrcđể bao gồm

đặt hoàn thành-bỏ qua trường hợp trên

Sau đó sử dụng ^X ^Rđể tải lại cấu hình.


30
"cũng như" - /etc/inputrchoặc ~/.inputrcmột tệp được chỉ định INPUTRClà những nơi duy nhất nó có thể đi. Nhập vào đó tại một dấu nhắc Bash sẽ không hoạt động.
Dennis Williamson

Rất tiếc! bạn nói đúng :)
John T

10
^X ^Rđể tải lạiinputrc
grawity

14
@DennisWilliamson: bạn có thể làm bind "set completion-ignore-case on"từ dòng lệnh; đối với, tôi tin rằng, chỉ phiên cuối cùng
Clay Bridges

1
Vì vậy, đó là những gì msysgit có nhưng MSYS2 thiếu! Ở đây tôi đã cố gắng tìm nó trong ví dụ / etc / profile ...
SamB

110

Tái cấu trúc với lợi ích của nhận thức muộn để tương phản với những ưu và nhược điểm của việc sử dụng [.]inputrcso với .bash_profile.
Mẹo của chiếc mũ để gạch dưới cho sự giúp đỡ của anh ấy.

Lưu ý: Chỉnh sửa dòng lệnh trong Bash được cung cấp bởi thư viện Readline; tùy chỉnh nó là không tầm thường, nhưng cũng đáng học hỏi; các tính năng của nó bao gồm khả năng xác định các phím tắt tùy chỉnh để chèn đoạn văn bản được xác định trước - xem Chỉnh sửa dòng lệnh trong Hướng dẫn tham khảo Bash

Để kiên trì thực hiện không phân biệt trường hợp hoàn thành tab trong Bash:


Tùy chọn A: Nếu bạn đã có:

  • một /etc/inputrctệp (áp dụng toàn hệ thống, yêu cầu sửa đổi sudo)
  • và / hoặc một ~/.inputrctệp (dành riêng cho người dùng)

    và / hoặc

bạn đang dự định tùy chỉnh rộng rãi thư viện readline và / hoặc muốn làm cho các tùy chỉnh có hiệu quả đối với các tập lệnh khi chúng gọi read -e:

Thêm dòng

set completion-ignore-case on

cho một trong hai tệp, tùy thuộc vào việc bạn muốn cài đặt có hiệu lực cho tất cả người dùng hay người dùng hiện tại (tạo tệp, nếu cần).

Một lệnh liên quan giúp hoàn thành tên tệp và thư mục dễ dàng hơn là:

set show-all-if-ambiguous on

Điều này khiến bạn không cần phải nhấn Tab hai lần khi có nhiều hơn một trận đấu.


Tùy chọn B: Ngoài ra, bạn có thể thêm các lệnh Readline vào ~/.bash_profiletệp dành riêng cho người dùng của mình trên OS X (hoặc ~/.bashrctrên Linux), bằng cách chuyển chúng dưới dạng một đối số duy nhất cho bindnội dung :

bind "set completion-ignore-case on"
bind "set show-all-if-ambiguous on"

Lưu ý rằng bindcác lệnh trong ~/.bash_profile/ ~/.bashrcđược ưu tiên hơn các lệnh tương đương trong một /etc/inputrchoặc ~/.inputrc.

Như đã ngụ ý ở trên, cấu hình Readline được xác định theo cách này sẽ không có hiệu lực trong các tập lệnh gọi read -eđể kích hoạt hỗ trợ Readline để đọc đầu vào của người dùng.


10
show-all-if-mơ hồ là tốt đẹp! Tôi thường tự hỏi tại sao họ làm cho tôi tab hai lần để thực hiện hành động đó. hàng ngàn tổ hợp phím được lưu trong tương lai của tôi! cảm ơn!
dùng34112

4
Tuyệt vời, nó thậm chí hoạt động cho cdcác lệnh. Điều này giải quyết được câu hỏi này và cũng sẽ tiết kiệm cho tôi hàng ngàn tổ hợp phím. :)
hoosierEE

1
Điểm tuyệt vời lại show-all-if-ambiguous. Tuy nhiên, vì bạn nói "như một giải pháp thay thế", thực sự có lợi ích gì khi thực hiện việc này thông qua bind, khi các inputrctệp dường như làm cho điều đó không cần thiết?
gạch dưới

1
@underscore_d: Câu hỏi hay; xin vui lòng xem câu trả lời cập nhật của tôi.
mkuity0

1
Tuyệt thật, cảm ơn nhé! Trên Debian 8.2 tôi không có inputrc, nhưng tôi vui vẻ tạo ~/.inputrcvà thêm chúng, cộng với các chỉ thị thực sự hữu ích khác. Tôi đoán rằng chúng tôi giả định rằng tất cả các độc giả đều biết rằng điều đó /etc/inputrc ảnh hưởng đến những người dùng khác (trừ khi điều này ghi đè lên các cài đặt bị ảnh hưởng)? Ngay trong khi chúng tôi đề cập đến hãy cẩn thận;)
underscore_d

1

Để tránh thay đổi cấu hình cho tất cả người dùng và để tránh quyền root, hãy sử dụng như sau:

if [ ! -a ~/.inputrc ]; then echo '$include /etc/inputrc' > ~/.inputrc; fi
echo 'set completion-ignore-case on' >> ~/.inputrc

Sau đó đăng nhập lại hoặc tải lại ~ / .inputrc

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.