Eklenen boşluklarla Bash otomatik tamamlama - neden ve nasıl düzeltilir?


29

Sekme tamamlamayı harf yazmaktan daha çok kullanırım. Yazı yazdım ve bir sonraki aşamada devam edebilmem rm ~/De<TAB>için tamamlanacaktı rm ~/Desktop/.

Son zamanlarda, bu davranış değişti. Şimdi tamamlama gerçekleşir rm ~/Desktop<SPACE>, bu da devam etmek istersem geri dönüp boşluk bırakmam gerektiği anlamına gelir. Bu beni ağlatıyor.

Değişiklikler fonksiyonu bulunan görünmektedir _longopt()içinde /etc/bash_completionancak o bildiğim kadarıyla takip edebilirsiniz gibidir. Bu değişiklik kasıtlı mı ve eğer öyleyse, bunun için iyi olan nedir? Eski davranışı, eski kodu başka bir sistemden kopyalamak yerine, tercihen bir yapılandırma seçeneğiyle geri alabilir miyim?

Düzenleme: Referans işlevi.

_longopt()
{
    local cur prev split=false
    _get_comp_words_by_ref -n = cur prev

    _split_longopt && split=true

    case "$prev" in
        --*[Dd][Ii][Rr]*)
            _filedir -d
            return 0
            ;;
        --*[Ff][Ii][Ll][Ee]*|--*[Pp][Aa][Tt][Hh]*)
            _filedir
            return 0
            ;;
    esac

    $split && return 0

    if [[ "$cur" == -* ]]; then
        COMPREPLY=( $( compgen -W "$( $1 --help 2>&1 | \
            sed -ne 's/.*\(--[-A-Za-z0-9]\{1,\}\).*/\1/p' | sort -u )" \
            -- "$cur" ) )
    elif [[ "$1" == @(mk|rm)dir ]]; then
        _filedir -d
    else
        _filedir
    fi
}

Bunun mantıklı olacağını görebilmemin tek yolu ~ / Desktop bir dosya veya boş bir dizinse. Ve ikinci durumda, bu sadece veya rmdirdeğil gibi komutlar için kullanışlıdır . mkdirtouch
l0b0

_longopt()Fonksiyonunun gövdesini gönderebilir misin ?
Aleksandr Levchuk

@MPi: tamamlamanın komuta bağlı olabileceğinin farkında olun (komut satırının ilk sözcüğü). Ayrıca readlineayarlara (size bir ~/inputrcdosya var mı?) Ve öğenin gerçek bir dizin olduğuna veya dizine bir işaret olduğuna bağlı olabilir.
enzotib

Tabii ki tamamlanma çizginin ilk kelimesine bağlı. Bu yüzden bazen tamamlamayı kandırmak için bir fantezi komutu kullanıyorum ve göndermeden önce sadece gerçek komutu değiştiriyorum. Ve .inputrcartık bu sistemde yok. (Bunlar günlerdi, geri al ve imleç anahtarlarını düzeltiyorlardı…) Ve tüm öğeler, dizin ya da dosya, sembolik bağlantı ya da bağlantı söz konusu olduğunda oluyor.
MPi

1
Mükemmel soru, aynı davranışları gözlemledim ve bu beni rahatsız ediyor. Yine de nedeni hakkında hiçbir fikrim yok.
Christoph

Yanıtlar:


22

Bu bilinen bir hatadır. Bkz bu LP sorusu ve bu hataları 1 2 .

Bu yorum düzeltme gibi görünüyor. Normal kanallar, düzenleme yavaş yavaş etkilemesi bir düzeltme için sabırsızlanıyorum Eğer /etc/bash_completionhattını 1587, değişim defaultiçin filenames(ilk bir yedeğini).


3
Özet: yama düzenleyerek gelene kadar bir hata olduğunu, yerel tamir edebiliriz /etc/bash_completion, değişim hattını 1587 defaultiçin filenames.
MPi

anwer'imi düzenledi
Christoph

9

Adobe Reader'ı Ubuntu 12.04'e yükledikten sonra da aynı sorunu çözdüm ve çözdüm.

_filedirBloğu yorumladım /etc/bash_completion.d/acroread.shve normal olarak tekrar çalıştı.


Bugünün tarihi itibariyle bu benim için de işe yaradı.
John Moeller

1
Aynı burada: acroread bunu tetikledi ve _filedirbloğu yorumlamak (sağ üstte) düzeltildi. Etkisi görmek için oturumu kapatmanız veya tüm kabuklarınızda 'exec bash' komutunu çalıştırmanız gerekir, bu soruya bakın .
dirkjot

2

Aynı sorunu yaşadım ve /etc/bash_completion.d/ dizinini kaldırarak düzelttim, sonra bash_completion programını tekrar yükleyin. Sanırım eski bir dosya bu dizinde ... Umarım bu da senin problemini çözer.



2
Bu - gerçekten - düzeltildi. Bununla birlikte, bu yöntem birçok tamamlamayı ortadan kaldırdığı için çok radikaldir. Paketi sildikten sonra bash-completion, kalan dosyalardan birinin /etc/bash_completion.d/suçlu olması gerekir. Öyleydi acroread.shbenim durumumda - bu yeniden tanımlıyor _filedir.
MPI
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.