web-dev-qa-db-fra.com

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

Le Bloc-notes ++ a une fonctionnalité pratique: si vous sélectionnez un mot dans votre texte (pas nécessairement un mot-clé), le mot est mis en surbrillance dans tout le texte. Cela peut-il aussi être fait à Emacs? Et si oui, comment? 

Il ne doit pas nécessairement fonctionner exactement comme Notepad ++ (c.-à-d. Via sélection); idéalement, j'aimerais créer une liaison de clé qui met en évidence toutes les occurrences du mot sous le curseur.

Ce serait formidable si les points saillants étaient permanents, c’est-à-dire que l’éloignement du point par rapport à un mot mis en surbrillance devrait pas entraîner la suppression du point fort.

En outre, il serait utile de disposer d’une solution permettant de naviguer entre les points forts (en utilisant des raccourcis clavier personnalisés).

67
Headcrab

Peut-être que mettre en évidence-symbol.el sur http://nschum.de/src/emacs/highlight-symbol/ est ce que vous recherchez:

alt text

36
polyglot

Les suggestions hi-lock sont bonnes. Je pense qu'il 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 de highlight-regexp qui ignore la casse et traduit un espace dans la regex pour correspondre à des espaces arbitraires. Pratique.

75
jrockway

Tapez C-s, puis tapez le mot actuel ou tapez C-w. En prime, vous pouvez maintenant cliquer à nouveau sur C-s pour rechercher le mot.

Ceci s'appelle recherche incrémentale .

35
ShreevatsaR

Ce que j'utilise est inactif-surligné

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

M-x idle-highlight définit un temporisateur d'inactivité mettant 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)))
13
Johnny

Light-symbol mettra en surbrillance le symbole terminé.

Alternativement, vous pouvez utiliser -recid , qui liste toutes les lignes correspondant à une expression rationnelle. Il est utile de voir rapidement toutes les fonctions d'une classe.

10
ieure

Essayez http://www.emacswiki.org/emacs/msearch.el Toutes les occurrences du texte sélectionné avec le curseur sont mises en surbrillance . Vous devez faire glisser la chaîne que vous souhaitez surligner. . Cela vous permet de changer facilement la sélection sans changer la surbrillance.

Si vous souhaitez conserver la mise en surbrillance d'une chaîne, vous pouvez la geler.

Vous pouvez asservir un tampon à un autre tampon. Le texte sélectionné dans la mémoire tampon principale sera également mis en surbrillance dans la mémoire tampon esclave. C'est utile pour comparer les tampons . Cela est également utile pour prendre des notes dans un tampon pendant que vous étudiez le texte dans un autre. Vous pouvez avoir une collection de mots-clés dans le tampon de notes. Faites glisser le curseur sur un tel mot-clé et ses occurrences dans le texte étudié seront mises en surbrillance.

J'utilise ce genre de choses depuis des années maintenant. J'ai ajouté le gel assez récemment. Alors peut-être que quelque chose est cassé. Si tel est le cas, laissez-moi une note sur http://www.emacswiki.org/emacs/msearch ou ici.

6
Tobias

Ce n'est peut-être pas aussi beau que ce que vous espériez, mais si vous mettez 

(global-hi-lock-mode 1)

dans votre fichier .emacs, vous pouvez alors saisir C-x w h REGEX <RET> <RET> pour mettre en surbrillance toutes les occurrences de REGEX et C-x w r REGEX <RET> pour les décoiler à nouveau. Encore une fois, pas aussi élégant que vous voudriez probablement, mais ça va marcher.

5
dancavallaro

Vérifier mise en évidence interactive

Devrait être:

C-xwh Mot <RET><RET>

5
CMS

Les commandes de la bibliothèque highlight.el Vous permettent de mettre en surbrillance le texte correspondant à une expression rationnelle (dans ce cas, un symbole), à ​​l'aide de superpositions ou de propriétés de texte. Vous pouvez parcourir les occurrences. La surbrillance peut être temporaire ou persistante. (Plus d'informations) .

2
Drew

Essayez iedit . Il met en évidence le mot au point et vous permet de modifier facilement toutes les occurrences de celui-ci. Avec une frappe supplémentaire (C- '), il cache toutes les lignes sans ce mot. Très utile!

2
Phob

Ceci ne mettra peut-être pas en évidence mais recherchera un mot sans que vous ayez besoin de le taper ...

quand vous avez atteint le mot que vous vouliez rechercher, C-S, puis lisez le mot complet avec C-W, vous pouvez alors C-S et le rechercher. Dans mon Emacs, il met également en évidence toutes les instances du document.

0
George

Ce paquet disponible dans les travaux Melpa vous permet de personnaliser le style de surbrillance. 

https://github.com/ignacy/idle-highlight-in-visible-buffers-mode

0
Pharaoh

Personne n'a mentionné symbol-overlay mode . C'est fondamentalement une meilleure réécriture de highlight-symbol-mode. "Mieux" comme dans, manque les bugs du symbole de surbrillance original (par exemple, le surlignage temporaire se bloque, ou le surlignage temporaire disparaît pour se déplacer dans le mot en surbrillance; ou ne pas être en mesure de surligner les symboles comme *) , mieux intégré et maintenu. Voir le paragraphe "Avantages" de son fichier README.

Vous pouvez l’installer comme d’habitude, avec M-xpackage-install  (assurez-vous de mettre à jour au préalable la liste des paquets avec package-list-packages) . Pour référence le bas de la poste a le code de ma config pour activer le mode.

Le Bloc-notes ++ a une fonctionnalité pratique: si vous sélectionnez un mot dans votre texte (pas nécessairement un mot-clé), le mot est mis en surbrillance dans tout le texte. Cela peut-il être fait aussi à Emacs? Et si oui, comment?

Une fois que vous avez activé overlay-symbol, les occurrences à l'écran sont affichées pour chaque mot sur lequel vous avez placé le curseur après un délai d'expiration (le délai d'expiration par défaut est de 0,5 s, et peut être configuré avec la variable symbol-overlay-idle-time) . Si un mot n'est pas mis en surbrillance, cela signifie qu'il n'y a qu'une seule correspondance à l'écran (celle sur laquelle vous avez placé le curseur) , il n'est donc pas nécessaire de le mettre en évidence.

Il serait bon que les points saillants soient permanents, c’est-à-dire que l’éloignement d’un point par rapport à un mot mis en surbrillance ne supprime pas le point fort.

Pour mettre le mot sous le curseur de manière permanente, utilisez la fonction symbol-overlay-put. Pour ne plus le souligner, appelez-le encore une fois.

Dans mon exemple de configuration, il est lié à Logo+` clé.


(require 'symbol-overlay)
(defun enable-symbol-overlay-mode ()
  (unless (or (minibufferp)
              (derived-mode-p 'magit-mode)
              (derived-mode-p 'xref--xref-buffer-mode))
    (symbol-overlay-mode t)))
(define-global-minor-mode global-symbol-overlay-mode ;; name of the new global mode
  symbol-overlay-mode                                ;; name of the minor mode
  enable-symbol-overlay-mode)
(global-symbol-overlay-mode)                         ;; enable it
(global-set-key (kbd "s-`") 'symbol-overlay-put)
(setq symbol-overlay-map (make-sparse-keymap))       ;; disable special cmds on overlays
0
Hi-Angel