Я использую bash, и мне было интересно, есть ли какой-нибудь плагин в bash или другой оболочке, который позволяет мне делать это
cat tfnislong.txt
+ [tab]
завершает, cat ThisFileNameIsSoLong.txt
как завершение табуляции в Sublime Text.
bash
shell
tab-completion
woodings
источник
источник
cat Th
+tab
?Ответы:
Я знаю https://github.com/mgalgs/fuzzy_bash_completion, который представляет собой набор функций оболочки, используемых с
complete
.Я думаю, что мы могли бы сделать немного лучше, хотя быть более кратким. Пора открыть ваш .bashrc или .profile ...
Основной хук, который мы используем, таков:
complete -o nospace -o filenames -F fuzzypath cd ls cat
Параметр -F означает использование функции оболочки для завершения табуляции, где параметры задаются в
COMPREPLY
переменной. Так, например:где
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 Completion FAQ расширяет варианты использования, но я верю, что в вашем примере вас больше всего интересует эта
COMPLETE_IN_WORD
функция. Это не совсем желаемое поведение, но оно близко. Суть в том, что существует множество способов расширить базовую функциональность, возможно, более доступным способом, чем использование bash.Вот расширение нечеткого совпадения, которое более точно соответствует желаемому; zsh-fuzzy match
Для некоторых идей вы можете взглянуть на популярный фреймворк oh-my-zsh, который имеет ряд функций для управления zsh и его расширения. Скорее всего, это больше, чем вы хотите, но под плагинами вы заметите сценарии автозавершения для различных ролей. Чтобы получить представление о возможностях.
источник