Bagaimana cara menampilkan penyelesaian string ke stdout?


15

Beberapa gitperintah memiliki banyak opsi, dan sering kali berguna untuk mencari yang saya butuhkan - saya hanya mencari opsi yang mengontrol TABlebar git-gui, tetapi ada sekitar 200 penyelesaian untuk git config. Solusi yang jelas adalah menyalin semua penyelesaian ke editor dan mencari melalui mereka, tapi saya lebih suka melakukannya

[something] | grep tab

Tidak ada manatau infohalaman untuk compgen, help compgenbahkan tidak menjelaskan pilihannya sendiri, dan tidak ada auto-complete untuk compgen(bagaimana itu untuk ironi?).

PS: compgen -Atidak berhasil.

PPS: Ini bukan pertanyaan tentang git-gui- Solusi untuk pertanyaan lebar tab ada di tempat lain.

PPPS: Ini bukan tentang perintah pelengkapan otomatis, hanya parameter perintah .


Ini sangat mirip dengan Cara menyalurkan output "tab complete"? , tetapi jawaban yang diterima di sana khusus untuk menyelesaikan perintah, bukan argumen
— Michael Mrozek

Jawaban:


10

Anda dapat menggunakan fungsi berikut, yang menggunakan cara sudopelengkapan otomatis yang sama menghasilkan daftar penyelesaian:

comp() {
    local COMP_LINE="$*"
    local COMP_WORDS=("$@")
    local COMP_CWORD=${#COMP_WORDS[@]}
    ((COMP_CWORD--))
    local COMP_POINT=${#COMP_LINE}
    local COMP_WORDBREAKS='"'"'><=;|&(:"
    # Don't really thing any real autocompletion script will rely on
    # the following 2 vars, but on principle they could ~~~  LOL.
    local COMP_TYPE=9
    local COMP_KEY=9
    _command_offset 0
    echo ${COMPREPLY[@]}
}
comp git config ''

di mana _command_offsetdidefinisikan dalam bash-completion (paket).

CATATAN: fungsi harus dijalankan dalam shell interaktif (yaitu jika itu ada dalam file, file harus bersumber bukan hanya dijalankan.) Atau aturan / fungsi penyelesaian yang diperlukan tidak akan ditentukan.

PS. compgen -Ahanya berfungsi untuk tindakan bawaan, apa yang seharusnya Anda coba (tetapi tidak berhasil) adalah compgen -F(atau sebenarnya compgen -o bashdefault -o default -o nospace -F _git). Alasan ini tidak bekerja (dan doc untuk perintah built-in bash termasuk compgen / complete) dapat ditemukan di bash (1) .


@ l0b0 semoga berhasil di semua kasus.
— yuyichao

Luar biasa, ini berhasil! Saya melakukan beberapa perubahan kecil dan sekarang dalam .bash_aliases saya untuk selamanya. Anda mungkin ingin memangkas sehingga hanya solusinya yang tersisa, tetapi tidak ada keraguan Anda mendapatkan karunia. Saya akan menghapus komentar diskusi saya karena tidak relevan lagi.
— l0b0

1
Saya telah menemukan bahwa menggunakan ini di shell interaktif dapat menghancurkan tab-completion yang sudah ada. Membuat masing-masing variabel lokal ke fungsi memecahkan masalah itu. (mis. local COMP_LINE="$*")
— AL Flanagan

@ALFlanagan Poin bagus. Diperbarui.
— yuyichao
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.