Saya menggunakan bash dan saya bertanya-tanya apakah ada plugin di bash atau shell lain yang memungkinkan saya untuk melakukan ini
cat tfnislong.txt+ [tab]selesai cat ThisFileNameIsSoLong.txtpersis seperti penyelesaian tab dalam Teks Sublime.
Saya menggunakan bash dan saya bertanya-tanya apakah ada plugin di bash atau shell lain yang memungkinkan saya untuk melakukan ini
cat tfnislong.txt+ [tab]selesai cat ThisFileNameIsSoLong.txtpersis seperti penyelesaian tab dalam Teks Sublime.
Jawaban:
Saya tahu https://github.com/mgalgs/fuzzy_bash_completion yang merupakan sekelompok fungsi shell yang digunakan complete.
Saya pikir kita mungkin bisa melakukan sedikit lebih baik, lebih ringkas. Saatnya membuka bust .bashrc atau .profile Anda ...
Kait dasar yang kami gunakan adalah ini:
complete -o nospace -o filenames -F fuzzypath cd ls cat
Opsi -F berarti menggunakan fungsi shell untuk penyelesaian tab, di mana opsi diatur dalam COMPREPLYvariabel. Jadi misalnya:
function fuzzypath () {
jika [-z $ 2]
kemudian
COMPREPLY = (`ls`)
lain
DIRPATH = `echo" $ 2 "| gsed 's | [^ /] * $ ||' `
BASENAME = `echo" $ 2 "| gsed | s. * / || '`
FILTER = `echo" $ BASENAME "| gsed 's |. | \ 0. * | g'`
COMPREPLY = (`ls $ DIRPATH | grep -i" $ FILTER "| gsed" s | ^ | $ DIRPATH | g "`)
fi
}
di mana DIRPATHsegalanya sebelum yang terakhir / di jalan Anda mengetik dan di BASENAMEmana kursor Anda saat ini.
FILTERDi sinilah fuzzy-ness masuk. Pada dasarnya, ambil BASENAMEdan masukkan .*antara setiap char untuk menghasilkan regex fuzz kami.
Sisanya hanya menggabungkan regex dengan ls untuk diproduksi COMPREPLY. Anda mungkin menemukan lebih banyak hal pintar untuk dilakukan di sini, mungkin dengan find.
Saya juga menemukan http://fahdshariff.blogspot.com/2011/04/writing-your-own-bash-completion.html berguna.
Anda mungkin menemukan fzf berguna. Ini adalah fuzzy finder tujuan umum yang ditulis dalam Ruby yang dapat digunakan dengan daftar hal apa saja: file, proses, sejarah perintah, cabang git, dll.
Script instalasinya akan mengatur CTRL-Tikatan kunci untuk shell Anda. GIF berikut ini menunjukkan cara kerjanya.

fzf.. (tput sc) dan kemudian mengembalikannya dengan tput rc..
Untuk mengikuti jawaban Anda yang lain, Anda mungkin ingin melihat ke zsh. Ini kompatibel dengan bash sehingga Anda dapat menggunakannya sebagai pengganti, tetapi mendukung fitur yang diperluas secara luas dan salah satunya adalah peningkatan tab yang sangat disadari konteks penyelesaian.
zsh Completion FAQ meluas pada kasus penggunaan, tapi saya yakin bahwa per contoh Anda, Anda akan paling tertarik dengan COMPLETE_IN_WORDfungsi ini. Ini bukan perilaku yang diinginkan, tapi dekat. Poin utama adalah bahwa ada banyak cara untuk memperluas fungsionalitas dasar dengan cara yang mungkin lebih mudah didekati daripada menggunakan bash.
Berikut adalah ekstensi kecocokan fuzzy yang akan memperkirakan apa yang Anda inginkan secara lebih spesifik; Pertandingan zsh-fuzzy
Untuk beberapa ide, Anda bisa melihat pada kerangka oh-my-zsh yang populer yang memiliki sejumlah fungsi untuk mengelola zsh dan memperluasnya. Ini lebih dari yang Anda inginkan, kemungkinan besar, tetapi di bawah plugin Anda akan mencatat skrip pelengkapan otomatis untuk berbagai peran. Untuk mendapatkan gambaran tentang kapabilitas.
cat Th+tab?