La plupart de ces réponses ne feront pas de recherche floue comme le fait le texte sublime - elles peuvent correspondre à une partie de la réponse, mais elles ne font pas le joli comportement "recherchez simplement toutes les lettres dans cet ordre".
Je pense que c'est un peu plus proche de ce que tu veux. J'ai créé une version spéciale de cd ("fcd") qui utilise la recherche floue pour trouver le répertoire cible. Super simple - ajoutez simplement ceci à votre bashrc :
function joinstr { local IFS="$1"; shift; echo "$*"; }
function fcd { cd $(joinstr \* $(echo "$*" | fold -w1))* }
Cela ajoutera un * entre chaque lettre dans l'entrée, donc si je veux aller, par exemple,
/home/dave/results/sample/today
Je peux simplement taper n'importe lequel des éléments suivants :
fcd /h/d/r/spl/t
fcd /h/d/r/s/t
fcd /h/d/r/sam/t
fcd /h/d/r/s/ty
En utilisant le premier comme exemple, cela exécutera cd /*h*/*d*/*r*/*s*p*l*/*t*
et laissez le shell trier ce qui correspond réellement.
Tant que le premier caractère est correct et qu'une lettre de chaque répertoire du chemin est écrite, il trouvera ce que vous cherchez. Peut-être pouvez-vous l'adapter à vos besoins ? Le bit important est :
$(joinstr \* $(echo "$*" | fold -w1))*
qui crée la chaîne de recherche floue.
Vous pouvez trouver fzf utile. C'est un chercheur flou à usage général écrit en Go qui peut être utilisé avec n'importe quelle liste de choses :fichiers, processus, historique des commandes, branches git, etc.
Son script d'installation configurera CTRL-T
raccourci clavier pour votre shell. Le GIF suivant montre comment cela fonctionne.
J'utilise habituellement :
ls -R | grep -i [whatever I can remember of the file name]
À partir d'un répertoire au-dessus où je m'attends à ce que le fichier soit - plus vous montez dans l'arborescence des répertoires, plus cela va être lent.
Quand je trouve le nom exact du fichier, je l'utilise dans find :
find . [discovered file name]
Cela pourrait être réduit en une seule ligne :
for f in $(ls --color=never -R | grep --color=never -i partialName); do find -name $f; done
(J'ai trouvé un problème avec ls et grep étant alias "--color=auto")