J'utilise bash et je me demandais s'il y avait un plugin dans bash ou un autre shell qui me permet de faire ceci
cat tfnislong.txt
+ se [tab]
termine cat ThisFileNameIsSoLong.txt
comme pour la complétion d'onglets dans Sublime Text.
bash
shell
tab-completion
bois
la source
la source
cat Th
+tab
?Réponses:
Je connais https://github.com/mgalgs/fuzzy_bash_completion qui est un tas de fonctions shell utilisées avec
complete
.Je pense que nous pourrions probablement faire un peu mieux, être plus concis. Il est temps d'ouvrir votre .bashrc ou .profile ...
Le crochet de base que nous utilisons est le suivant:
complete -o nospace -o filenames -F fuzzypath cd ls cat
L'option -F signifie utiliser une fonction shell pour la tabulation, où les options sont définies dans la
COMPREPLY
variable. Ainsi, par exemple:où se
DIRPATH
trouve tout avant le dernier / sur votre chemin que vous tapez etBASENAME
où se trouve actuellement votre curseur.FILTER
C'est là que le flou entre en jeu. Fondamentalement, prenezBASENAME
et insérez un.*
entre chaque caractère pour produire notre expression floue .Le reste combine simplement l'expression régulière avec ls pour produire
COMPREPLY
. Vous pouvez trouver des choses plus intelligentes à faire ici, peut-être avecfind
.J'ai également trouvé que http://fahdshariff.blogspot.com/2011/04/writing-your-own-bash-completion.html était utile.
la source
Vous pouvez trouver fzf utile. C'est un chercheur flou à usage général écrit en Ruby qui peut être utilisé avec n'importe quelle liste de choses: fichiers, processus, historique des commandes, branches git, etc.
Son script d'installation configurera la
CTRL-T
liaison de touches pour votre shell. Le GIF suivant montre comment cela fonctionne.la source
fzf
.. (tput sc) et de le restaurer plus tard avectput rc
..Pour accompagner votre autre réponse, vous voudrez peut-être examiner zsh. Il est rétrocompatible avec bash, vous pouvez donc l'utiliser en remplacement, mais il prend en charge des fonctionnalités considérablement étendues et l'une d'entre elles est considérablement améliorée en matière de tabulation contextuelle.
zsh Completion FAQ étend sur les cas d'utilisation, mais je crois que selon votre exemple, vous seriez le plus intéressé par la
COMPLETE_IN_WORD
fonction. Ce n'est pas tout à fait le comportement souhaité, mais c'est proche. Le point principal est qu'il existe de nombreuses façons d'étendre la fonctionnalité de base d'une manière peut-être plus accessible que d'utiliser bash.Voici une extension de correspondance floue qui rapprocherait plus précisément ce que vous voulez; correspondance zsh-fuzzy
Pour quelques idées, vous pouvez jeter un œil au framework populaire oh-my-zsh qui a un certain nombre de fonctions pour gérer et étendre zsh. C'est plus que ce que vous voulez, très probablement, mais sous les plugins, vous noterez des scripts de complétion automatique pour une variété de rôles. Pour avoir une idée des capacités.
la source