Penyelesaian tab huruf tidak sensitif di Bash

142

Apakah ada cara untuk membuat Bash tab menyelesaikan kasus dengan tidak sensitif?

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

Saya menggunakan Mac OS X 10.6

Jeffrey Aylesworth
sumber

Jawaban:

170

Perbarui teks /etc/inputrcuntuk disertakan

atur penyelesaian-abaikan-kasus aktif

Kemudian gunakan ^X ^Runtuk memuat ulang konfigurasi.

John T
sumber
30
"juga" - /etc/inputrcatau ~/.inputrcfile yang ditunjuk oleh INPUTRCadalah satu-satunya tempat yang bisa dituju. Memasukkannya di Bash prompt tidak akan berhasil.
Dennis Williamson
wah! Anda benar :)
John T
10
^X ^Runtuk memuat ulanginputrc
grawity
14
@ DennisWilliamson: Anda dapat melakukannya bind "set completion-ignore-case on"dari baris perintah; karena, saya percaya, sesi terminal itu saja
Clay Bridges
1
Jadi itulah yang dimiliki msysgit tetapi kekurangan MSYS2! Di sini saya mencoba menemukannya di eg / etc / profile ...
SamB
111

Direstrukturisasi dengan manfaat dari belakang untuk kontras pro dan kontra dari menggunakan [.]inputrcvs .bash_profile.
Kiat topi untuk menggarisbawahi _ bantuannya.

Catatan: Pengeditan baris perintah di Bash disediakan oleh pustaka Readline; mengkustomisasi itu tidak sepele, tetapi layak dipelajari; fitur-fiturnya termasuk kemampuan untuk menentukan pintasan keyboard khusus untuk memasukkan potongan teks yang telah ditentukan - lihat Pengeditan Baris Perintah dalam Manual Referensi Bash

Untuk secara terus - menerus membuat penyelesaian huruf-huruf tidak sensitif di Bash:


Opsi A: Jika Anda sudah memiliki:

  • sebuah /etc/inputrcfile (berlaku untuk seluruh sistem, membutuhkan modifikasi sudo)
  • dan / atau ~/.inputrcfile (khusus pengguna)

    dan / atau

Anda berencana untuk menyesuaikan pustaka readline secara luas dan / atau ingin menjadikan kustomisasi juga efektif untuk skrip ketika mereka memanggil read -e:

Tambahkan baris

set completion-ignore-case on

ke salah satu file, tergantung pada apakah Anda ingin pengaturan menjadi efektif untuk semua pengguna atau pengguna saat ini (buat file, jika perlu).

Perintah terkait yang membuat penyelesaian nama file dan direktori lebih mudah adalah:

set show-all-if-ambiguous on

Ini membuatnya tidak perlu untuk menekan Tab dua kali ketika ada lebih dari satu kecocokan.


Opsi B: Atau, Anda dapat menambahkan perintah Readline ke ~/.bash_profilefile khusus pengguna Anda di OS X (atau ~/.bashrcdi Linux), dengan meneruskannya sebagai argumen tunggal ke bindbuiltin :

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

Perhatikan bahwa bindperintah di ~/.bash_profile/ ~/.bashrcdiutamakan daripada perintah yang setara di salah satu /etc/inputrcatau ~/.inputrc.

Seperti tersirat di atas, konfigurasi Readline yang ditentukan dengan cara ini tidak akan berpengaruh pada skrip yang memanggil read -euntuk mengaktifkan dukungan Readline untuk membaca input pengguna.

mklement0
sumber
10
show-all-if-ambiguous sangat bagus! Saya sering bertanya-tanya mengapa mereka membuat saya tab dua kali untuk melakukan tindakan itu. ribuan penekanan tombol disimpan di masa depan saya! Terima kasih!
user34112
4
Luar biasa, ini bahkan berfungsi untuk cdperintah. Yang memecahkan pertanyaan ini dan akan menyelamatkan saya ribuan penekanan tombol juga. :)
hoosierEE
1
Poin bagus kembali show-all-if-ambiguous. Namun, karena Anda mengatakan "sebagai alternatif", apakah sebenarnya ada manfaatnya melakukan hal ini melalui bind, ketika inputrcfile - file tersebut tampaknya tidak perlu?
underscore_d
1
@underscore_d: Pertanyaan bagus; silakan lihat jawaban saya yang diperbarui.
mklement0
1
Keren Terimakasih! Pada Debian 8.2 saya tidak punya inputrc, tapi saya dengan senang hati membuat ~/.inputrc& menambahkan ini, ditambah arahan lain yang sangat berguna. Saya kira kami menganggap semua pembaca tahu yang /etc/inputrc memengaruhi pengguna lain (kecuali yang terakhir mengabaikan pengaturan yang terpengaruh)? Tepat saat kami menyebutkan peringatan;)
underscore_d
1

Untuk menghindari perubahan konfigurasi untuk semua pengguna dan untuk menghindari izin root gunakan yang berikut:

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

Kemudian masuk kembali atau muat ulang ~ / .inputrc

Ankur A Sharma
sumber