Quand je C-s
pourrai chercher. Comment dois-je faire une fonction que je pourrais lier par exemple à C-r
laquelle me permettrait de rechercher dans les résultats d'une requête de recherche prédéfinie?
Comme le contenu de la fenêtre serait:
function xyz(a, b)
return a + b
end
Je peux C-M-s
avec function.*
une requête et le résultat sera function xyz(a, b)
.
Je veux avoir une fonction où je pourrais entrer une requête et rechercher dans ces résultats (qui seraient générés automatiquement derrière mes yeux).
MISE À JOUR
Merci à tous pour les solutions. occur
, helm-occur
fonctionne également très bien, mais j'ai accepté la réponse de Jordon Biondo car il a fourni le code dont j'avais besoin pour répondre pleinement à ma question.
helm-swoop
, mais votre question (et surtout le titre) n'est pas très claire à ce sujet. Peut-être que je n'ai tout simplement pas compris votre question parce que je ne connais pas la barre.imenu
a très bien fonctionné pour moi! Sauf que je recherche une solution générique à ma questionRéponses:
L'approche simple serait d'utiliser simplement rgrep.
utiliser M-x
rgrep
et spécifier la recherche de "fonction" dans le fichier courant dans le répertoire courant. Vous pouvez envelopper cela dans une commande afin que vous n'ayez pas à spécifier les options à chaque fois comme ceci:Cela produira un tampon de recherche avec les signatures de fonction et vous pouvez passer aux définitions si vous le souhaitez.
la source
grep
,rgrep
,occur
Et la recherche comme seule ligne par ligne . Autrement dit, les contextes de recherche sont des lignes simples. Je pensais que l'OP demandait de rechercher des définitions de fonctions. Mais puisque cette réponse a été acceptée, je suppose que la question telle qu'elle est posée n'est pas vraiment ce que l'on voulait.function xyz(a, b)
lesquelles, si votre lua est correctement formaté, c'est exactement ce que vous obtiendrez.function xyz(a, b)
.Fonctionnerait
occur
pour vous?M-x
occur
ouM-s o
alors entrer votre requête vous fournira une liste de lignes correspondant à cette expression rationnelle. Vous pouvez ensuite utiliserC-s
pour rechercher dans le tampon Occur pour affiner votre recherche dans les lignes correspondantes.la source
Emacs a une commande appelée
occur
qui est très bien adaptée à ce type de tâche. Si Helm est installé, vous pouvez l'utiliser à lahelm-occur
place.Se produire
La
occur
commande fait partie d'emacs vanilla et est liéeM-s o
par défaut. Occur vous demandera une expression rationnelle à rechercher, puis il ouvrira une nouvelle fenêtre affichant toutes les lignes du tampon actuel qui contiennent une correspondance. Le*Occur*
tampon résultant peut être recherché à l'aide deisearch
(C-s
).M-s o function RET
pour afficher toutes les lignes correspondant à la "fonction"C-x o
pour déplacer le focus vers le*Occur*
tamponC-s
pour lancer une recherche dans les résultats de la rechercheHelm Occur
Si vous avez installé Helm, vous pouvez utiliser
helm-occur
quelque chose de similaire. Dans ce cas, le*Helm Occur*
tampon ne sera pas directement consultable avecC-s
. Dans Helm, vous pouvez rechercher plusieurs termes de recherche simplement en les séparant par un espace.M-x helm-occur RET
ouvrir une fenêtre Helm Occurfunction
pour afficher toutes les lignes contenant "fonction"SPC foo
pour affiner les résultats aux lignes contenant également fooDans l'un ou l'autre de ces modes, la sélection de la correspondance dans le tampon d'occurrence et l'appui sur Entrée vous feront sauter à cette ligne du code.
la source
Si vous utilisez la bibliothèque Icicles, vous pouvez facilement faire ce genre de chose. Ce que vous demandez (si je comprends bien), c'est de rechercher uniquement dans certains contextes de recherche .
Par exemple, comme dans ce cas, vous souhaiterez peut-être rechercher uniquement dans les définitions de fonction - les contextes de recherche sont des définitions de fonction. Dans Lisp, ce serait des choses comme l'
defun
art.Icicles a plusieurs commandes de recherche Icicles prédéfinies pour rechercher des définitions comme celle-ci. Celles-ci sont collectivement appelées commandes Icicles Imenu .
Pour rechercher uniquement les définitions de commandes, vous pouvez utiliser la commande
icicle-imenu-command-full
. Pour rechercher uniquement des définitions de fonctions non interactives, utilisez la commandeicicle-imenu-non-interactive-function-full
.Au-delà de la recherche de définitions, vous pouvez facilement définir tout type de contexte à rechercher. La manière la plus simple est de fournir une expression rationnelle. La commande
icicle-search
vous invite à indiquer l'expression rationnelle de définition du contexte de recherche. Vous pouvez également utiliser une fonction pour définir les contextes de recherche.D'autres possibilités incluent:
Rechercher le texte de différents types de choses (par exemple, sexps, phrases, listes, chaînes, commentaires, éléments XML, ...), c'est-à-dire ignorer tout autre texte en dehors des choses.
Recherche de zones de texte qui ont donné des propriétés de texte ou de superposition, c'est-à-dire en ignorant un autre texte.
REMARQUE:
D'autres réponses ici mentionnées
occur
et similaires (helm-occur
) fournissent un type limité de recherche de contexte: les contextes de recherche ne sont que les lignes d'un tampon.C'est beaucoup plus limité que, disons, la recherche dans des définitions de fonctions entières, ce que je pense que vous demandez. Avec Icicles , la commande
icicle-occur
(liée àC-c '
) vous permet de rechercher dans les lignes en tant que contextes de recherche.la source
Avec Isearch + :
C-M-s .+function.+
, pour rechercher des lignes entières qui contiennentfunction
.C-z .
suivi d'une expression régulière pour quelque chose que vous souhaitez rechercher dans les lignes qui contiennentfunction
.(Facultatif) Répétez # 2 avec d'autres motifs (regexps) pour faire correspondre la même ligne. Les matchs peuvent être dans n'importe quel ordre dans la ligne.
Au lieu de l'étape # 1, vous pouvez commencer par
C-M-s .+ C-z . function
. Le but est de rechercher des lignes entières qui contiennentfunction
ainsi que tous les autres motifs que vous aimez.Fonctionnement
C-z .
: il vous invite à indiquer un modèle en ligne correspondant (par exemplefunction
). Il enveloppe cela avec.*
de chaque côté, pour obtenir un motif de ligne complète (par exemple.*function.*
). Il ajoute un prédicat de filtre qui nécessite que votre chaîne de recherche actuelle (.+
) corresponde également à ce modèle (par exemple.*function.*
).Voir Filtrage dynamique Isearch pour plus d'informations.
la source