85 votes

Comment mettre en évidence toutes les occurrences d'un mot dans un tampon Emacs ?

Notepad++ dispose d'une fonctionnalité pratique : si vous sélectionnez un mot dans votre texte (pas nécessairement un mot-clé), ce mot est mis en évidence dans tout le texte. Est-ce que cela peut être fait dans Emacs également ? Et si oui, comment ?

Il n'est pas nécessaire que cela fonctionne exactement comme Notepad++ (c'est-à-dire via la sélection) ; idéalement, j'aimerais mettre en place une liaison de touches qui provoque la mise en évidence de toutes les occurrences du mot sous le curseur.

Ce serait génial si les surlignages étaient permanents, c'est-à-dire que le fait de déplacer le point à l'écart d'un mot surligné devrait no provoquer la suppression de la surbrillance.

Il serait également utile de disposer d'une solution permettant de naviguer entre les points forts (en utilisant des liaisons de touches personnalisées).

91voto

jrockway Points 23734

El hi-lock Les suggestions sont bonnes. Je pense que c'est plus facile d'utiliser le M-x versions, cependant :

M-x highlight-regexp RET <REGEXP>

M-x highlight-phrase RET <REGEXP>

highlight-phrase est juste un peu de sucre autour highlight-regexp qui ignore la casse et traduit un espace dans la regex pour correspondre à un espace blanc arbitraire. Pratique.

25 votes

Pour effacer les hautes lumières, utilisez : M-x unhighligh-regex accord-clé : C-x w r ... Aussi, mettre en évidence la phrase n'est pas totalement insensible à la casse. Seulement initial les lettres minuscules (des mots) ae sont insensibles à la casse. (Je suppose que c'était destiné à traiter les fred vs Fred ) par exemple il génère une regex comme : [Cc]at[ ]+[Dd]og

0 votes

Merci, je trouve votre commentaire sur la différence plus clair que l'aide intégrée.

1 votes

Note : Erreur de frappe : il faut lire unhighlight-regexp au lieu de unhighligh-regex (manquant t y p ).

42voto

polyglot Points 3627

Peut-être que highlight-symbol.el à http://nschum.de/src/emacs/highlight-symbol/ est ce que vous recherchez :

alt text

1 votes

J'ai essayé mais je n'ai pas réussi à le faire fonctionner - emacs s'est plaint de "Symbol's value as variable is void : highlight-symbol-idle-delay".

1 votes

J'ai eu ce problème particulier. J'ai fini par commenter toute la partie (defcustom highlight-symbol-idle-delay...), et déplacer (defvar highlight-symbol-idle-delay...) avant (defun highlight-symbol-update-timer...), ce qui évitera l'erreur.

1 votes

Oui, j'ai finalement fait exactement la même chose.

37voto

ShreevatsaR Points 21219

Type C-s puis tapez le mot courant ou tapez C-w . En prime, vous pouvez maintenant frapper C-s à nouveau pour rechercher le mot.

C'est ce qu'on appelle recherche incrémentale .

11 votes

Pour ce que ça vaut, je comprends maintenant l'intention de la question : vous voulez que les occurrences soient mises en évidence de manière "permanente" (jusqu'à ce que vous l'éteigniez) même si vous effectuez d'autres tâches comme vous déplacer, taper, etc. Pour cela, C-s (recherche incrémentale) ne fonctionnera pas (la mise en évidence est "temporaire" ; vous pouvez vous déplacer dans le tampon mais il est difficile d'effectuer un nouveau travail d'édition). J'utilise (et j'ai upvoted) la fonction M-x highlight-regexp (et le lier à un raccourci).

15voto

Johnny Points 402

Ce que j'utilise est idle-highlight

http://www.emacswiki.org/emacs/IdleHighlight

M-x idle-highlight définit une minuterie d'inactivité qui met en évidence toutes les occurrences dans le tampon du mot sous le point.

Pour l'activer pour tous les modes de programmation, dans ~/.emacs.d/init.el :

;; highlight words
(add-hook 'prog-mode-hook (lambda () (idle-highlight-mode t)))

0 votes

J'ai eu quelques incohérences avec les lambdas dans les hooks. Vous pourriez peut-être envisager d'appeler un defun.

10voto

ieure Points 1291

Symbole lumineux mettra en évidence le point de symbole sur lequel il se trouve.

Alternativement, vous pouvez utiliser se produire qui liste toutes les lignes correspondant à une expression rationnelle. C'est utile pour voir rapidement toutes les fonctions d'une classe.

0 votes

Cela semble très bien, mais comment sait-il s'il a trouvé le même symbole ou un autre symbole portant le même nom ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X