Dize tamamlamalarını stdout'a nasıl gönderebilirim?


15

Bazı gitkomutları birçok seçenek var ve genellikle tek ben ihtiyacı için içlerinden aramak için yararlı olacağını - Sadece denetleyen seçenek arıyordu TABiçinde genişliğini git-gui, ama için yaklaşık 200 tamamlamaları vardır git config. Açık bir çözüm, tüm tamamlamaları bir düzenleyiciye kopyalamak ve bunları aramaktır, ancak yapmayı tercih ederim

[something] | grep tab

Hiçbir vardır manya infosayfalarınınkine compgen, help compgenhatta kendi seçeneklerini açıklamıyor ve hiçbir otomatik tamamlama için orada compgen(nasıl en o ironi için?).

PS: compgen -Açalışmıyor.

PPS: Bu bir soru değil git-gui- Sekme genişliği sorusunun çözümü başka bir yerdeydi.

Bitki koruma ürünlerinin: Bu değil otomatik doldurarak komutları, sadece yaklaşık komut parametreleri .


Bu "sekme tamamlandı" çıkış boru nasıl benzer ? , ancak kabul edilen cevap, argümanları değil, komutları tamamlamak için özel olarak vardı
Michael Mrozek

Yanıtlar:


10

sudoOtomatik tamamlamanın tamamlama listesini oluşturmasıyla aynı şekilde kullanılan aşağıdaki işlevi kullanabilirsiniz :

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 ''

Burada _command_offsetbash tamamlama (paket) olarak tanımlanır.

NOT: işlevin etkileşimli bir kabukta çalıştırılması gerekir (yani bir dosyadaysa, dosyanın sadece çalıştırılmak yerine kaynaklanması gerekir.) Veya gerekli tamamlama kuralları / işlevleri tanımlanmayacaktır.

PS. compgen -Asadece yerleşik eylemler için çalışır, denemeniz gereken (ama hiç çalışmayan) şey compgen -F(ya da aslında compgen -o bashdefault -o default -o nospace -F _git). Bunun çalışmamasının nedeni (ve compgen / complete dahil bash yerleşik komutları için doc) bash (1) ' de bulunabilir .


@ l0b0 umarım her durumda çalışır.
yuyichao

Mükemmel, işe yarıyor! Birkaç küçük ayar yaptım ve şimdi benim için .bash_aliases iyi. Budamak isteyebilirsiniz, bu yüzden sadece çözüm kalır, ancak şüphe yok. Artık alakalı olmadıkları için tartışma yorumlarımı kaldıracağım.
l0b0

1
Bunu etkileşimli kabukta kullanmanın, zaten yerinde olan sekme tamamlamayı yok edebileceğini buldum. Değişkenlerin her birini işleve yerel yapmak bu sorunu çözer. (örn. local COMP_LINE="$*")
AL Flanagan

@ALFlanagan İyi bir nokta. Güncellenmiş.
yuyichao
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.