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.txt
persis 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.txt
persis 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 COMPREPLY
variabel. 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 DIRPATH
segalanya sebelum yang terakhir / di jalan Anda mengetik dan di BASENAME
mana kursor Anda saat ini.
FILTER
Di sinilah fuzzy-ness masuk. Pada dasarnya, ambil BASENAME
dan 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-T
ikatan 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_WORD
fungsi 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
?