Force Bash menyelesaikan tab normal jika penyelesaian cerdas gagal

10

Sejak penyelesaian tab menjadi fitur standar dalam shell saya telah menjadi pengguna yang sangat senang. Saya bahkan suka penyelesaian cerdas Bash (di mana ia hanya mencari file PDF, jika saya mengetikkan evince foo <TAB>) - asalkan menebak dengan benar.

Ini menghancurkan hari yang sebaliknya bahagia ketika Bash menggunakan penyelesaian cerdasnya untuk menolak penyelesaian.

Hari ini saya ingin:

tar xvf centos5.8_x86_1.ova

Jadi saya masuk:

tar xvf cent<TAB>

dan Bash menolak untuk menyelesaikan path karena file .ova bukan yang biasanya Anda gunakan dengan tar.

Saya tahu saya bisa menghapus paket bash-completion untuk menghapus penyelesaian cerdas. Tetapi bisakah saya mengambil kue dan memakannya juga?

Bisakah saya meminta bash untuk menggunakan penyelesaian cerdas terlebih dahulu, dan jika gagal, maka gunakan penyelesaian non-cerdas?

Ole Tange
sumber
1
<spam> Zsh bisa melakukannya. </spam>
Gilles 'SANGAT berhenti menjadi jahat'

Jawaban:

9

Yang berikut ini harus mengaktifkan penyelesaian bash normal setelah semua penyelesaian 'cerdas' gagal untuk tar program, vim dan emacs:

compopt -o bashdefault tar vim emacs

lihat juga halaman yang relevan di manual bash online.

Peringatan: Anda mendapatkan perilaku normal untuk jenis penyelesaian (perintah / nama file / nama pengguna, dll.) Yang ditentukan oleh penyelesaian cerdas untuk perintah yang ada, misalnya, penyelesaian untuk servicetidak akan menyelesaikan nama file bahkan jika Anda menelepon complete -o bashdefault service.

Dalam hal ini dan kasus lain di mana pelengkapan otomatis cerdas gagal, Anda selalu dapat menekan Alt-/(atau M-/dalam notasi manual bash) untuk menyelesaikan nama file hampir dengan cara yang sama seperti TAB bekerja jika penyelesaian cerdas dinonaktifkan (hampir sama dalam arti bahwa M-/tidak pola lengkap suka *.txt). Lihat di sini untuk urutan kunci untuk jenis penyelesaian lainnya seperti perintah dan nama pengguna.

Matthieu
sumber
2
Terima kasih untuk Alt- / disebutkan, saya tidak tahu itu ada di sana
Michael Speer
1

bash completetion adalah perpanjangan dari penyelesaian standar bash dan itu sendiri merupakan program bash. Jadi, jika Anda ingin mengubah cara kerja program, ubah saja. Ini adalah perangkat lunak gratis, Anda bebas untuk melakukannya. Untuk kasus spesifik dari tarperintah, file tersebut adalah /usr/share/bash-completion/completions/tar. Untuk tarmelengkapi file dengan ekstensi secara otomatis ova, tambahkan saja ke baris

local tars='@(@(tar|gem|spkg)?(.@(Z|[gx]z|bz?(2)|lzma))|t@([glx]z|bz?(2)))'

begitu katanya

local tars='@(@(tar|gem|spkg|ova)?(.@(Z|[gx]z|bz?(2)|lzma))|t@([glx]z|bz?(2)))'

Perhatikan bahwa ini adalah jalur dan kode yang ada untuk Debian Wheezy (versi stabil saat ini). Distro atau versi yang berbeda mungkin memiliki kode yang berbeda tetapi idenya sama. Buka kode dan sesuaikan untuk melakukan apa yang Anda inginkan.

Edit: Saya hanya melihat bahwa pertanyaannya adalah tentang setiap kali bahwa ia tidak menemukan kecocokan dan tidak hanya kasus tertentu menambahkan ovake tar. Mungkin masih bisa bermanfaat bagi seseorang, untuk mengetahui di mana mereka dapat mencari sumbernya.

carandraug
sumber
4
Memodifikasi file di / usr yang dimiliki oleh manajer paket adalah cara yang baik untuk memicu kejutan buruk saat upgrade. Lebih baik: mengganti konfigurasi paket.
Chris Down
1
@ ChrisDown dan bagaimana Anda melakukannya? Saya masih mencari solusi .bashrc yang bersih.
Clayton Stanley