Чи є оболонка, яка підтримує нечітке завершення, як у Sublime Text?


14

Я використовую bash, і мені було цікаво, чи є якийсь плагін в bash або інший оболонці, який дозволяє мені це зробити cat tfnislong.txt+ [tab]завершується так cat ThisFileNameIsSoLong.txtсамо, як і вкладка в Sublime Text.


Чому б просто не зробити cat Th+ tab?
daviewales

1
@daviewales Показати всі 269 причин?
Факс

Відповіді:


11

Я знаю про 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 .


6

Ви можете вважати fzf корисним. Це нечіткий шукач загального призначення, написаний на Ruby, який можна використовувати з будь-яким списком речей: файлами, процесами, історією команд, гілками git тощо.

Його сценарій встановлення встановить CTRL-Tнав'язку клавіш для вашої оболонки. Наступний GIF показує, як це працює.


FZF - це чудово! Дякую велике за внесок. Це врятувало мене тижнями роботи. Я починав писати нечітке завершення для Баша, коли я, на щастя, знайшов FZF. Це працює ідеально, я просто повинен був пам’ятати, щоб зберегти позицію курсора перед викликом fzf.. (tput sc) і пізніше відновити його за допомогою tput rc..
Håkon Hægland

3

Щоб відповідати іншій вашій відповіді, ви можете заглянути в zsh. Це назад сумісний з bash, так що ви можете використовувати його як краплю в заміні, але він підтримує значно розширені функції, і одна з них значно покращує контекстне усвідомлення завершення вкладки.

Поширені запитання про завершення zsh розширюються щодо випадків використання, але я вважаю, що у вашому прикладі вас найбільше зацікавить COMPLETE_IN_WORDфункція. Це не зовсім бажана поведінка, але це близько. Основний момент полягає в тому, що існує маса способів розширення базової функціональності, можливо, більш доступним способом, ніж використання bash.

Ось нечітке розширення відповідності, яке б наближало те, що ви хочете конкретніше; zsh-нечітка відповідність

Для деяких ідей ви можете поглянути на популярну рамку oh-my-zsh, яка має ряд функцій для управління zsh та їх розширення. Швидше за все, це хочеться, але під плагінами ви будете зазначати сценарії автоматичного завершення різних ролей. Щоб отримати уявлення про можливості.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.