Tôi có thể làm cho Tab tự động hoàn thành không phân biệt chữ hoa chữ thường trong Bash không?


144

Terminal của Ubuntu sử dụng tính năng tự động hoàn thành phân biệt chữ hoa chữ thường, như tôi cho là sẽ được mong đợi cho Linux.

Nhưng tôi nghĩ thay vào đó sẽ thuận tiện hơn khi sử dụng một trường hợp không phân biệt chữ hoa chữ thường, để tiết kiệm cho bạn phải chính xác trong khi bắt đầu một tên, và có lẽ sẽ có giá trị tích cực sai. Có thể thay đổi hành vi này?


Câu hỏi rất hay. Là một công cụ tiện dụng, việc hoàn thành tab không nên nghiêm ngặt như hệ thống máy tính nói chung khi nói đến việc đặt tên.
masterxilo

Câu trả lời:


170

Để làm cho bashkhông phân biệt chữ hoa chữ thường cho người dùng hiện tại:

Chạy kịch bản shell sau trong một thiết bị đầu cuối:

# If ~/.inputrc doesn't exist yet: First include the original /etc/inputrc
# so it won't get overriden
if [ ! -a ~/.inputrc ]; then echo '$include /etc/inputrc' > ~/.inputrc; fi

# Add shell-option to ~/.inputrc to enable case-insensitive tab completion
echo 'set completion-ignore-case On' >> ~/.inputrc

Bắt đầu một vỏ mới (mở lại thiết bị đầu cuối).

Để thực hiện các thay đổi trên toàn hệ thống:

# add option to /etc/inputrc to enable case-insensitive tab completion for all users
echo 'set completion-ignore-case On' >> /etc/inputrc
# you may have to use this instead if you are not a superuser:
echo 'set completion-ignore-case On' | sudo tee -a /etc/inputrc

Để biết chi tiết, xem man bash. Vâng, đó là một trang dài, nhưng bash là một chương trình hơi phức tạp và nếu bạn muốn chỉ cần tìm trang đó để "không phân biệt chữ hoa chữ thường" để đi đến phần có liên quan. Mọi người thường học bash một tùy chọn tại một thời điểm hoặc một tập lệnh bash tại một thời điểm và phải mất một thời gian dài để làm chủ tất cả các sắc thái. Sự quan tâm của bạn có thể thay đổi.


Cảm ơn. Tôi đánh giá cao giải pháp thân thiện với người dùng cụ thể / không phải quản trị viên. Dòng echo dường như đã hoạt động, nhưng bây giờ tôi dường như đã mất khả năng sử dụng Ctrl-Left / Right để di chuyển con trỏ. Ngoài ra, sẽ >>an toàn hơn >?
mwfearnley

Nói chung >> sẽ an toàn hơn, lỗi của tôi, tôi đã cho rằng bạn không có ~ / .inputrc. Tôi cũng đặt noclobber =) Bit chắc chắn tại sao các phím mũi tên của bạn không hoạt động, tôi không thể sao chép điều đó. Bạn có thể xóa ~ / .inputrc và bắt đầu một shell mới.
Panther

Vâng, nó hoạt động trở lại nếu tôi gỡ bỏ nó .. Theo linuxfromscratch.org/blfs/view/5.1/postlfs/inputrc.html đầu vào mới có thể ghi đè lên toàn cầu?
mwfearnley

2
Chúa ơi, tôi đã sao chép nó vào / etc / inputrc và tôi không thể gõ "i" nữa và khi tôi gõ "e" thì nó chỉ spam "ssssssssss [..]" vào bảng điều khiển .. tốt hơn nên sử dụng giải pháp từ @ emtin4
Luca Steeb

2
@LucaSteeb Tôi cũng nhấn nó, nhưng sau đó nhận ra toàn bộ khối này không được cho vào .inputrc của bạn, nhưng được gõ một lần. Chỉ $include /etc/inputrcset completion-ignore-case onnên có trong tệp ~ ..inputrc của bạn.
Chris

49

Mở một thiết bị đầu cuối và gõ lệnh dưới đây:

echo set completion-ignore-case on | sudo tee -a /etc/inputrc

Nhập mật khẩu. Khởi động lại thiết bị đầu cuối.

Nếu trong một số trường hợp bạn muốn loại bỏ trường hợp không nhạy cảm, chỉ cần chỉnh sửa tệp / etc / inputrc bằng cách xóa set completion-ignore-casedòng.

Đó là tất cả.


OK, tôi đã làm rõ điều đó cho bạn. Phải mất một thời gian để tìm hiểu về bash, nhưng tiếp tục khám phá, đọc và hỏi. linuxcommand.org là một khởi đầu phổ biến;)
Panther

3
Trong trường hợp có nhiều hơn một người dùng, điều này sẽ thay đổi tất cả, đó có thể là hành vi mong muốn
Walter Tross

2
cho đến nay câu trả lời đơn giản và đơn giản nhất ở đây
workabyte

câu trả lời đơn giản và rõ ràng
Developerium

12

Tôi biết câu hỏi này rất cũ nhưng trừ khi tôi thiếu một cái gì đó tôi nghĩ rằng tôi có một giải pháp siêu đơn giản nếu bạn đang sử dụng bash.

echo "bind 'set completion-ignore-case on'" >> ~/.bashrc

Hoặc chỉ cần thêm dòng bằng trình soạn thảo văn bản yêu thích của bạn. Khởi động lại phiên bash của bạn và tận hưởng.


2
Chà, bạn đang thiếu một cái gì đó: ~/.inputrcđược đọc theo readline, đó là những gì bash sử dụng để cung cấp sự hoàn thành này. Readline cũng được sử dụng bởi các chương trình khác, vì vậy, để thiết lập điều này, ~/.inputrctheo gợi ý , câu trả lời được chấp nhận sẽ tốt hơn.
muru

Cảm ơn lời đề nghị của bạn, nó dạy tôi nhiều hơn một chút, nhưng tôi phải nói rằng nó dường như không đơn giản hơn cái tôi chấp nhận, nó chỉ sử dụng một dòng bổ sung để đảm bảo tệp mới không vô hiệu hóa tệp cũ.
mwfearnley

hoàn hảo. bind 'set completion-ignore-case on'.bashrc
Vâng,

3

Bạn có thể làm điều này bằng cách đặt một biến cấu hình cho đường dẫn GNU, đây là biến xử lý đầu vào trong một vỏ tương tác.

Biến cần thiết là completion-ignore-casevà có thể được đặt trực tiếp trong phiên bash của bạn với:

bind "set completion-ignore-case on"

Nó có thể được kích hoạt cho tất cả các phiên bash trong tương lai bằng cách đặt nó vào ~/.inputrctệp của người dùng hoặc hệ thống /etc/inputrc, để kích hoạt nó cho tất cả người dùng. Đây là tập tin khởi tạo cho readline.

Nhưng lưu ý rằng nếu bạn tạo ~/.inputrc, điều này sẽ ghi đè lên bản sao hệ thống . (Đối với tôi điều này gây ra cho tôi để mất một số ánh xạ quan trọng, chẳng hạn như Ctrl-Left/ RightBạn có thể thấy những người thân mà bởi perusing. /etc/inputrcFile.)
Cách khắc phục vấn đề này là để đặt các đường dây $include /etc/inputrcở đầu ~/.inputrc, ví dụ:

$include /etc/inputrc

set completion-ignore-case on

Để áp dụng các thay đổi, khởi động lại bash hoặc tải lại inputrc , ví dụ với Ctrl+x, Ctrl+r.

Thông tin thêm về readline và inputrc có thể được tìm thấy trong man bashman 3 readline.

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.