Відповіді:
Я знаю про https://github.com/mgalgs/fuzzy_bash_completion, який є купою функцій оболонки, з якими використовується complete
.
Я думаю, що ми могли б, мабуть, зробити трохи краще, але бути більш стислими. Час відкрити ваш .bashrc або .profile ...
Основний гак, який ми використовуємо:
complete -o nospace -o filenames -F fuzzypath cd ls cat
-F варіант означає використання функції оболонки для завершення вкладки, де параметри встановлюються у COMPREPLY
змінній. Так, наприклад:
функція fuzzypath () { якщо [-z $ 2] потім COMPREPLY = (`ls`) ще DIRPATH = `відлуння" $ 2 "| gsed 's | [^ /] * $ ||' ` BASENAME = `відлуння" $ 2 "| gsed 's |. * / ||' ` FILTER = `echo" $ BASENAME "| gsed 's |. | \ 0. * | g'` COMPREPLY = (`ls $ DIRPATH | grep -i" $ FILTER "| gsed" s | ^ | $ DIRPATH | g "`) фі }
де DIRPATH
все до останнього / на вашому шляху, який ви вводите, і BASENAME
де зараз знаходиться ваш курсор.
FILTER
це де нечітка ність. В основному, візьміть BASENAME
і вставіть .*
між кожним знаком, щоб створити наш нечіткий вираз.
Решта - просто поєднання регексу з ls для отримання COMPREPLY
. Ви можете знайти тут більш розумні речі, можливо, з ними find
.
Також я вважаю корисним http://fahdshariff.blogspot.com/2011/04/writing-your-own-bash-completion.html .
Ви можете вважати fzf корисним. Це нечіткий шукач загального призначення, написаний на Ruby, який можна використовувати з будь-яким списком речей: файлами, процесами, історією команд, гілками git тощо.
Його сценарій встановлення встановить CTRL-T
нав'язку клавіш для вашої оболонки. Наступний GIF показує, як це працює.
fzf
.. (tput sc) і пізніше відновити його за допомогою tput rc
..
Щоб відповідати іншій вашій відповіді, ви можете заглянути в zsh. Це назад сумісний з bash, так що ви можете використовувати його як краплю в заміні, але він підтримує значно розширені функції, і одна з них значно покращує контекстне усвідомлення завершення вкладки.
Поширені запитання про завершення zsh розширюються щодо випадків використання, але я вважаю, що у вашому прикладі вас найбільше зацікавить COMPLETE_IN_WORD
функція. Це не зовсім бажана поведінка, але це близько. Основний момент полягає в тому, що існує маса способів розширення базової функціональності, можливо, більш доступним способом, ніж використання bash.
Ось нечітке розширення відповідності, яке б наближало те, що ви хочете конкретніше; zsh-нечітка відповідність
Для деяких ідей ви можете поглянути на популярну рамку oh-my-zsh, яка має ряд функцій для управління zsh та їх розширення. Швидше за все, це хочеться, але під плагінами ви будете зазначати сценарії автоматичного завершення різних ролей. Щоб отримати уявлення про можливості.
cat Th
+tab
?