Saya memiliki banyak skrip penyelesaian bash yang diatur (kebanyakan menggunakan bash-it dan beberapa setup secara manual).
Saya juga punya banyak pengaturan alias untuk tugas-tugas umum seperti gco
untuk git checkout
. Saat ini saya dapat mengetik git checkout d
Tabdan develop
selesai untuk saya tetapi ketika saya mengetiknya gco d
Tabtidak lengkap.
Saya berasumsi ini karena skrip penyelesaian selesai git
dan gagal dilihat gco
.
Apakah ada cara untuk secara umum / terprogram untuk mendapatkan semua skrip penyelesaian saya untuk bekerja dengan alias saya? Tidak dapat menyelesaikan saat menggunakan jenis alias mengalahkan tujuan alias.
bash
tab-completion
dstarh
sumber
sumber
bash --version
untuk mendapatkan ini (jangan gunakan-v
, output berbeda).ll --[TAB]
akan mencetak daftar opsi untukls
? Saya cukup skeptis dengan hal ini, tetapi jika Anda yakin hal seperti itu ada pada jam 11.10 saya ingin tahu untuk menggali dan menentukan apa yang telah dihapus.Jawaban:
Kode berikut, diadaptasi dari jawaban Stack Overflow ini dan utas diskusi Forum Ubuntu ini akan menambah penyelesaian untuk semua alias yang Anda tentukan:
Untuk alias sederhana (hanya perintah, tanpa argumen), ia akan menetapkan fungsi penyelesaian asli ke alias; untuk alias dengan argumen, itu menciptakan fungsi wrapper yang menyisipkan argumen tambahan ke fungsi penyelesaian asli.
Tidak seperti skrip tempat ia berevolusi, fungsinya menghormati tanda kutip untuk perintah alias dan argumennya (tetapi yang pertama harus dicocokkan dengan perintah penyelesaian, dan tidak dapat disarangkan), dan ia harus dapat dengan baik menyaring alias ke daftar perintah dan pipa (yang dilewati, karena tidak mungkin untuk menemukan apa yang harus diselesaikan di dalamnya tanpa membuat ulang logika parsing baris perintah shell lengkap).
Pemakaian
Simpan kode sebagai file skrip shell dan sumber yang ada di, atau salin fungsi grosir ke,
.bashrc
(atau file dot terkait Anda ). Yang penting adalah memanggil fungsi setelah selesai bash dan alias definisi telah diatur (kode di atas memanggil fungsi tepat setelah definisinya, dalam semangat "sumber dan lupa", tetapi Anda dapat memindahkan panggilan ke mana saja di hilir jika itu lebih cocok untukmu). Jika Anda tidak ingin fungsi di lingkungan Anda setelah keluar, Anda dapat menambahkanunset -f alias_completion
setelah memanggilnya.Catatan
Jika Anda menggunakan
bash
4.1 atau lebih dan menggunakan penyelesaian yang dimuat secara dinamis, skrip akan mencoba memuat penyelesaian untuk semua perintah alias Anda sehingga dapat membangun fungsi pembungkus untuk alias Anda.sumber
~/.bashrc
. Baik menyimpannya sebagai file skrip shell dan sumbernya (. /path/to/alias_completion.sh
), atau menyalin dan menempelkan kode grosir./usr/share/bash-completion/completions/
hanya dimuat pertama kali pengguna benar-benar memukul[TAB]
. Jadi, bahkan jika fungsi tersebut diambil dari~/.bashrc
itu tidak akan menghasilkan penyelesaian untuk alias untuk perintah di dalamnya. Setelah memastikancomplete -p
berfungsiapt-get
danapt-cache
saya salin-tempelkan fungsi Anda ke terminal dan berfungsi dengan benar./tmp
ke~/.bash_completion
dan secara manual ditambahkan di awalsource /usr/share/bash-completion/completions/
entri yang relevan (secara terpisah untukapt-get
danapt-cache
-apt-{cache,get}
tidak berfungsi).Ya, inilah proyek lengkap alias yang menyelesaikan masalah Anda dengan tepat. Ini memberikan penyelesaian alias generik dan terprogram tanpa menggunakan
eval
.sumber
Ini adalah cara manual, bagi mereka yang mencari ini.
Pertama, cari perintah penyelesaian asli. Contoh:
Sekarang tambahkan ini ke skrip startup Anda (mis. ~ / .Bashrc):
sumber: https://superuser.com/a/1004334
sumber