Bisakah saya membuat Tab penyelesaian otomatis tidak peka huruf besar-kecil di Bash?

144

Terminal Ubuntu menggunakan penyelesaian otomatis peka huruf besar-kecil, seperti yang saya duga akan dilakukan untuk Linux.

Tapi saya pikir akan lebih mudah untuk menggunakan yang case-insensitive sebagai gantinya, untuk menyelamatkan Anda harus akurat saat memulai nama, dan mungkin akan bernilai positif palsu ekstra. Apakah mungkin untuk mengubah perilaku ini?

mwfearnley
sumber
Pertanyaan yang sangat bagus Sebagai alat kegunaan, penyelesaian tab tidak harus seketat sistem komputer secara umum dalam hal penamaan.
masterxilo

Jawaban:

170

Untuk membuat bashcase-insensitive untuk pengguna saat ini:

Jalankan skrip shell berikut di terminal:

# 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

Mulai shell baru (buka kembali terminal).

Untuk membuat perubahan di seluruh sistem:

# 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

Untuk detailnya, lihat man bash. Ya itu adalah halaman yang panjang, tetapi bash adalah program yang agak rumit, dan jika Anda hanya ingin mencari halaman itu untuk "case-insensitive" untuk pergi ke bagian yang relevan. Orang biasanya mempelajari bash satu opsi pada satu waktu atau satu skrip bash pada satu waktu dan butuh waktu lama untuk menguasai semua nuansa. Minat Anda dapat bervariasi.

Harimau kumbang
sumber
Terima kasih. Saya menghargai solusi ramah pengguna / non-admin. Garis gema tampaknya telah berfungsi, tetapi sekarang saya tampaknya telah kehilangan kemampuan untuk menggunakan Ctrl-Kiri / Kanan untuk memindahkan kursor. Juga, akankah >>lebih aman daripada >?
mwfearnley
Secara umum >> akan lebih aman, kesalahan saya, saya berasumsi Anda tidak memiliki ~ / .inputrc. Saya juga mengatur noclobber =) Sedikit yakin mengapa tombol panah Anda tidak berfungsi, saya tidak bisa meniru itu. Anda dapat menghapus ~ / .inputrc dan memulai shell baru.
Panther
Ya, itu berfungsi lagi jika saya menghapusnya .. Menurut linuxfromscratch.org/blfs/view/5.1/postlfs/inputrc.html inputrc baru mungkin menimpa yang global?
mwfearnley
2
Sial, saya menyalin ini ke / etc / inputrc dan saya tidak bisa mengetik "i" lagi dan ketika saya mengetik "e" itu hanya spam "ssssssssss [..]" ke konsol .. lebih baik gunakan solusi dari @ emtin4
Luca Steeb
2
@ LucaSteeb saya mengenai itu juga, tetapi kemudian menyadari bahwa seluruh blok ini tidak seharusnya dimasukkan ke dalam .inputrc Anda, tetapi diketik sekali. Hanya $include /etc/inputrcdan set completion-ignore-case onharus di file ~ ..inputrc Anda.
Chris
49

Buka terminal dan ketik perintah di bawah ini:

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

Masukkan kata kunci. Mulai ulang terminal.

Jika dalam beberapa kasus Anda ingin menghapus case case, cukup edit / etc / inputrc file dengan menghapus set completion-ignore-casebaris.

Itu saja.

emtin4
sumber
OK, saya mengklarifikasi untuk Anda. Butuh waktu untuk belajar tentang bash, tetapi tetap menjelajah, membaca, dan bertanya. linuxcommand.org adalah awal yang populer;)
Panther
3
Jika ada lebih dari satu pengguna, ini mengubahnya untuk semua, yang mungkin atau mungkin bukan perilaku yang diinginkan
Walter Tross
2
sejauh ini jawaban yang paling lurus ke depan dan sederhana di sini
workabyte
jawaban yang sederhana dan jelas
Developerium
12

Saya tahu pertanyaan ini sudah sangat lama tetapi kecuali saya kehilangan sesuatu, saya pikir saya punya solusi super sederhana jika Anda menggunakan bash.

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

Atau cukup tambahkan baris menggunakan editor teks favorit Anda. Mulai ulang sesi bash Anda dan nikmati.

init3
sumber
2
Nah, Anda melewatkan sesuatu: ~/.inputrcdibaca oleh readline, yang digunakan bash untuk menyediakan penyelesaian ini. Readline juga digunakan oleh program lain, jadi, untuk pengaturan ini secara umum, ~/.inputrcseperti yang disarankan jawaban yang diterima akan lebih baik.
muru
Terima kasih atas saran Anda, ini mengajarkan saya sedikit lebih banyak, tetapi saya harus mengatakan bahwa itu tidak tampak lebih sederhana daripada yang saya terima, yang hanya menggunakan baris tambahan untuk memastikan file baru tidak membatalkan yang lama.
mwfearnley
sempurna. Yah satu-satunya hal yang perlu diingat adalah bind 'set completion-ignore-case on'harus pergi di baris baru.bashrc
Vishrant
3

Anda dapat melakukan ini dengan mengatur variabel konfigurasi untuk readline GNU, yang merupakan apa yang menangani input dalam shell interaktif.

Variabel yang dibutuhkan adalah completion-ignore-case, dan dapat diatur langsung di sesi bash Anda dengan:

bind "set completion-ignore-case on"

Itu dapat diaktifkan untuk semua sesi bash masa depan dengan meletakkannya di file pengguna ~/.inputrc, atau sistem /etc/inputrc, untuk memungkinkannya untuk semua pengguna. Ini adalah file inisialisasi untuk readline.

Tetapi perhatikan bahwa jika Anda membuat ~/.inputrc, ini akan menimpa salinan sistem . (Bagi saya ini menyebabkan saya kehilangan beberapa pemetaan kunci, seperti Ctrl-Left/ Right. Anda dapat melihat yang mana dengan meneliti /etc/inputrcfile tersebut.)
Cara untuk memperbaiki masalah ini adalah dengan meletakkan baris $include /etc/inputrcdi bagian atas ~/.inputrc, misalnya:

$include /etc/inputrc

set completion-ignore-case on

Untuk menerapkan perubahan, restart bash atau ulang inputrc , misalnya dengan Ctrl+x, Ctrl+r.

Informasi lebih lanjut tentang readline dan inputrc dapat ditemukan di man bashdan man 3 readline.

mwfearnley
sumber