9
votes

Emacs Trouver le fichier dans le projet sur un grand projet

Dans Vim, il y a ce plugin étonnant appelé Command-t, qui vous permet de rechercher floue à travers tous les fichiers de votre projet. Nous avons une application de rails assez importante avec une tonne de fichiers et il est capable de le gérer à peu près sans ralentissement du tout.

J'ai essayé quelques choses (comme FFIP, Textmate.el's Command-T, et le projet Rinari-Recueil de Rinari). L'interface utilisateur est géniale (i <3 flex), mais le problème qu'ils ont tous sont sur un grand projet, la performance est mauvaise au point d'être inutilisable.

Actuellement, je prends plus d'utilisation des commandes de navigation Rinaris et du fichier IDO-Windy. Entre deux d'entre eux, c'est une configuration utilisable, mais ce serait bien d'avoir une recherche folle Fuzzy Fuzzy dans le projet.

Quelqu'un peut-il connaître un script plus performant que ce que j'ai essayé?


3 commentaires

Voici quelques autres forfaits qui font quelque chose comme ceci: EMACSWIKI.ORG/EMACS/LODEFILEANYWhere


Essayez m-x n'importe quoi, si vous ne l'avez pas fait, pour la comparaison


J'ai posté mon autre solution basée ci-dessous. Faites-moi savoir si vous avez des problèmes avec cela.


5 Réponses :


2
votes

dépend de ce que vous entendez par correspondance fuzzy. La correspondance la plus floue est intrinsèquement lente, mais certains algorithmes légers et pseudo-floues sont assez rapides. De manière générale, vous êtes probablement mieux à partir de la recherche Regexp , pas une recherche floue.

Quoi qu'il en soit, il y a deux parties à la question:


3 commentaires

regarder dans des glaçons et quoi que ce soit + eproject maintenant, mettra à jour les choses une fois que j'ai mis un peu plus de travail


J'ai une solution basée sur n'importe quoi + rinari + mon script ruby ​​personnalisé qui groks .gitignore pour ne trouver que des fichiers utiles. Il a la mise en cache, et c'est la lickity-fractionné rapidement comme des versions Textmate Slickeddit. ;) Malheureusement, je n'aurai pas le temps de l'emballer avant ce week-end. Je vais le poster comme une réponse quand je le fais.


@event_jr qui semble absolument délicieux: D



0
votes

Vous voulez probablement idutils , mais ne pas connaître toutes ces autres Technologies < / em> Vous mentionnez que je ne peux pas être sûr.


0 commentaires

3
votes

Un représentant GitHub pour ma concoction est ici: https://github.com/lewang/anything -Project-fichiers

J'ai ajouté quelques sources supplémentaires de plus afin que tout-projet-recherche puisse être remplacé par "C-x B". Donc, l'idée est que vous appuyez sur "CX B", vous complétez des tampons existants, des fichiers récents via récentef (personnellement je pira-je à utiliser "session.el" à la place, mais c'est un petit diff), des fichiers dans le directeur actuel, des fichiers Projet en cours. Je trouve ça assez pratique.

J'ai utilisé cela pendant un moment, mais ce n'est pas bien testé, veuillez rapporter des bugs que vous trouvez.


5 commentaires

C'est plutôt génial :) Mon problème est que notre projet est d'environ 6,5 000 fichiers, et tout (au moins dans mon ordinateur portable) s'étouffe à cette quantité de choses. Aller à l'essayer sur mon i7 au travail, et si cela ne fonctionne pas, apportez plusieurs sources différentes sur certains DIRS (par exemple, les tests sont de 1,5 km du total des fichiers) grâce à une tonne pour cela, à peu près sûr que ce soit la piste que je vais descendre


Mon projet a 2,5 km de fichiers "intéressants". Je viens de l'avoir grandi à 7,5k pour un test et tout fonctionne bien. Charge dans environ la même quantité de temps - environ 0,5 seconde sur mon MBP de 2,5 GHz Core-2-Duo.


Le temps de chargement est bien, c'est lorsque vous essayez de réduire les résultats. Donc, dans mon projet de fichier 6.5K, il y a un dossier SKUS avec un fichier show.html.erb et un fichier index.html.erb. Lorsque je recherche "Skus Show", il existe une pause notable tant qu'elle trouve le fichier. Lorsque j'essaie de supprimer "Afficher" et de le remplacer par "Index", il y a une pause beaucoup plus longue. Ce que je pense, c'est que je ne me soucie pas des migrations tellement (qui est> 1k fichiers), et si je peux les tests de portée (anthers 1.5K fichiers) dans sa propre chose, j'espère que cela suffira à se débarrasser de (ou réduire) les pauses


Je ne peux toujours pas reproduire un ralentissement. Peut-être que vous pouvez m'envoyer la sortie de "Find_interresting " sur github?


Ce lien 404s maintenant. Où puis-je trouver le repo mis à jour?



2
votes

Vous pouvez essayer GPicker . Si vous passez - devinez , il essaiera de déterminer les fichiers pertinents si le backend SCM telle que GIT.

J'utilise après l'extrait de fichier dans le projet, où la racine du projet est déterminée par < Un href = "https://github.com/jrockway/eproject" rel = "nofollow"> eproject . xxx


1 commentaires

Cela semble très intéressant. ATM im en utilisant FUZZY-FILE-FINDER, qui a une dépendance à un gemme rubis (ce que je ne suis pas vraiment fan de) Je vais donner à GPicker un essai



3
votes

Essayez https://github.com/redguardtoo/finind-file-in- Projet qui utilise gnu trouve code> ou BSD Trouver code> pour rechercher des fichiers. Rien ne peut battre la vitesse de c!

MX Wind-File-in-Project-by-sélection est la seule commande que vous avez besoin d'utilisation. P>

J'ai testé avec 50000+ Fichiers sur un netbook en pierre sans problème. P>

Par défaut, il utilise efficacement ivy-mode code> pour filtrer le candidat et IDO-MODE CODE> COMME FACHBACK . J'ai testé le mode ivy avec trois millions de candidats forts>. Maintenant, vous obtenez l'idée que Emacs Lisp elle-même est suffisamment rapide. P>

AT * Nix, le noyau fournit du cache pour Rechercher code>, donc si vous recherchez les fichiers avec la même entrée, la réponse est instantané. p>

En plus, le code> ivy-mode Cache> Cache automatiquement Les derniers résultats de la recherche dans EMACS LISP Variable Ivy-Dernier code>, afin que vous puissiez MX Ivy-CV Code> Pour obtenir les candidats précédents sans déranger Rechercher code>. P>

Vous pouvez (SETQ My-My-cached-résultat de loisirs) code > Pour stocker ivy-dernier code> dans une autre variable. Ensuite, vous pouvez MX My-Ivy-CV CODE>: P>

(defun my-ivy-resume ()
  (interactive)
  (let* ((ivy-last (if my-cached-result my-cached-result ivy-last))
         (default-directory (ffip-get-project-root-directory)))
    (ivy-resume)))


2 commentaires

My-Viy-CV donne: La dernière session n'est pas compatible avec «Ivy-CV» `error, comment pouvons-nous le réparer?


Rétrograder à la version 5.