Sublime Text'deki gibi bulanık tamamlamayı destekleyen bir kabuk var mı?


14

Ben Bash kullanıyorum ve bana bunu sağlayan bash veya diğer kabuk içinde herhangi bir eklenti olup olmadığını merak ediyorum cat tfnislong.txt+ [tab]için tamamlanana cat ThisFileNameIsSoLong.txtSublime Text içinde tıpkı sekme tamamlanması.


Neden sadece cat Th+ değil tab?
daviewales

1
@daviewales 269 neden görüntüle?
Faks

Yanıtlar:


11

Https://github.com/mgalgs/fuzzy_bash_completion ile birlikte kullanılan bir grup kabuk işlevi olduğunu biliyorum complete.

Sanırım muhtemelen biraz daha iyisini yapabiliriz, daha özlü olabiliriz. .Bashrc veya .profile dosyanızı açma zamanı ...

Kullandığımız temel kanca şudur:

complete -o nospace -o filenames -F fuzzypath cd ls cat

-F seçeneği, sekme tamamlama için seçeneklerin COMPREPLYdeğişkente ayarlandığı bir kabuk işlevi kullanılması anlamına gelir . Yani mesela:

işlev fuzzypath () {
    eğer [-z $ 2] 
    sonra
        UYUM = (`ls`)
    Başka
        DIRPATH = "echo" $ 2 "| gsed 's | [^ /] * $ ||' '
        BASENAME = "echo" $ 2 "| gsed 's |. * / ||' '
        FİLTRE = "echo" $ BASENAME "| gsed 's |. | \ 0. * | g'`
        COMPREPLY = (`ls $ DIRPATH | grep -i" $ FILTER "| gsed" s | ^ | $ DIRPATH | g "")
    fi
}

nerede DIRPATHyazdığınız son / yolunuzdaki her şey ve BASENAMEimlecinizin bulunduğu yer.

FILTERBulanıklığın devreye girdiği yerdir. Temel olarak, bulanık grafikimizi üretmek için her karakter BASENAMEarasına bir tane ekleyin ve ekleyin .*.

Gerisi sadece regex'i ls ile birleştiriyor COMPREPLY. Burada yapmak için daha akıllıca şeyler bulabilirsiniz find.

Ayrıca http://fahdshariff.blogspot.com/2011/04/writing-your-own-bash-completion.html dosyasını yararlı buldum .


6

FZF'yi yararlı bulabilirsiniz . Ruby'de yazılmış, her şey listesiyle kullanılabilen genel amaçlı bir bulanık bulucu: dosyalar, işlemler, komut geçmişi, git dalları, vb.

Kurulum betiği CTRL-Tkabuğunuz için tuş bağlama ayarlayacaktır . Aşağıdaki GIF nasıl çalıştığını gösterir.


FZF harika! Katkınız için çok teşekkürler. Bu bana haftalarca çalışma kurtardı .. Neyse ki FZF bulduğumda Bash için bulanık tamamlama yazmaya başladım. Mükemmel çalışıyor, sadece aramadan önce imleç konumunu kaydetmeyi hatırlamak zorunda kaldım fzf.. (tput sc) ve daha sonra ile geri yükleme tput rc..
Håkon Hægland

3

Diğer cevabınızla birlikte gitmek için zsh'ye bakmak isteyebilirsiniz. Bash ile geriye doğru uyumludur, bu yüzden değiştirme sırasında bir damla olarak kullanabilirsiniz, ancak önemli ölçüde genişletilmiş özellikleri destekler ve bunlardan biri bağlam farkındalık sekmesinin tamamlanmasıdır.

zsh Tamamlama SSS kullanım durumlarını genişletir, ancak örneğinize göre COMPLETE_IN_WORDişleve en çok ilgi duyacağınıza inanıyorum . Tam olarak istenen davranış değil, yakın. Ana nokta, temel işlevselliği bash kullanmaktan daha ulaşılabilir bir şekilde genişletmenin birçok yolu olmasıdır.

İstediğinizi daha spesifik olarak tahmin edebileceğiniz bulanık bir eşleme uzantısı; zsh-bulanık maç

Bazı fikirler için, zsh'ı yönetmek ve genişletmek için bir dizi işlevi olan popüler oh-my-zsh çerçevesine göz atabilirsiniz . Muhtemelen istediğinizden daha fazla, ancak eklentilerin altında çeşitli roller için otomatik tamamlama komut dosyalarını not edeceksiniz. Yetenekler hakkında fikir sahibi olmak.

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.