Estou usando bash e eu queria saber se existe qualquer plugin em bash ou outro shell que me permite fazer isso
cat tfnislong.txt
+ [tab]
concluída a cat ThisFileNameIsSoLong.txt
apenas como a conclusão de tabulação em Sublime texto.
bash
shell
tab-completion
madeira
fonte
fonte
cat Th
+tab
?Respostas:
Eu sei de https://github.com/mgalgs/fuzzy_bash_completion, que é um monte de funções de shell usadas com
complete
.Acho que provavelmente poderíamos fazer um pouco melhor, ser mais concisos. Hora de abrir seu .bashrc ou .profile ...
O gancho básico que usamos é o seguinte:
complete -o nospace -o filenames -F fuzzypath cd ls cat
-F opção significa usar uma função de shell para a conclusão da guia, onde as opções são definidas na
COMPREPLY
variável Então, por exemplo:onde
DIRPATH
está tudo antes do último / no caminho que você está digitando eBASENAME
é onde está o cursor no momento.FILTER
é onde entra a distorção. Basicamente, pegueBASENAME
e insira um.*
entre cada caractere para produzir nosso regex de distorção.O resto está apenas combinando o regex com ls para produzir
COMPREPLY
. Talvez você encontre coisas mais inteligentes para fazer aqui, talvez comfind
.Também achei http://fahdshariff.blogspot.com/2011/04/writing-your-own-bash-completion.html útil.
fonte
Você pode achar o fzf útil. É um localizador difuso de uso geral escrito em Ruby que pode ser usado com qualquer lista de coisas: arquivos, processos, histórico de comandos, ramificações git, etc.
Seu script de instalação configurará a
CTRL-T
combinação de teclas para o seu shell. O GIF a seguir mostra como funciona.fonte
fzf
.. (tput sc) e depois restaurá-lo comtput rc
..Para acompanhar sua outra resposta, convém procurar no zsh. É retrocompatível com o bash, para que você possa usá-lo como uma queda na substituição, mas suporta recursos significativamente expandidos e um deles é o aprimoramento da guia com reconhecimento de contexto bastante aprimorado.
As perguntas frequentes sobre a conclusão do zsh se expandem nos casos de uso, mas acredito que, de acordo com o seu exemplo, você estaria mais interessado na
COMPLETE_IN_WORD
função. Não é exatamente o comportamento desejado, mas está próximo. O ponto principal é que existem várias maneiras de estender a funcionalidade básica de uma maneira talvez mais acessível do que usar o bash.Aqui está uma extensão de correspondência difusa que aproximaria o que você deseja mais especificamente; correspondência zsh-fuzzy
Para algumas idéias, você pode dar uma olhada na popular estrutura oh-my-zsh , que possui várias funções para gerenciar e estendê-lo. É mais do que você deseja, provavelmente, mas nos plug-ins você notará scripts de preenchimento automático para várias funções. Para ter uma idéia dos recursos.
fonte