Comment mettre en surbrillance le symbole en surbrillance avec le symbole de surbrillance au point

13

highlight-symbol-at-point est vraiment utile mais je n'ai pas pu trouver un moyen facile de désélectionner les symboles.

Actuellement, je dois appeler à unhighlight-regexpplusieurs reprises pour chaque symbole en surbrillance.

Existe-t-il une meilleure façon de:

  • mettre en surbrillance tous les symboles en surbrillance dans un tampon
  • mettre en surbrillance un symbole au point?
kostya
la source
Avez-vous besoin de mettre en surbrillance tous les symboles en une seule fois?
Kaushal Modi
La plupart du temps, oui. Désactiver de temps en temps un symbole au point est également utile.
kostya
Les réponses seraient différentes si vous souhaitez mettre en surbrillance le symbole sous le point ou mettre en surbrillance tous les symboles.
Kaushal Modi
J'ai mis à jour ma question
kostya
2
Vous pouvez supprimer tous les symboles en surbrillance en utilisantM-x hi-lock-mode
Amir Karimi

Réponses:

10

Existe-t-il une meilleure façon de mettre en surbrillance tous les symboles en surbrillance dans un tampon?

De C-h f unhighlight-regexp, nous obtenons

(unhighlight-regexp REGEXP)

Supprimez la mise en surbrillance de chaque correspondance dans REGEXP définie par Hi-Lock. De manière interactive, demandez REGEXP, en acceptant uniquement les expressions rationnelles précédemment insérées par les fonctions interactives de verrouillage. Si REGEXP est t (ou si Cu a été spécifié de manière interactive), supprimez tous les surlignages Hi-Lock.

Cela signifie que nous devons simplement appeler unhighlight-regexpavec tcomme argument pour supprimer tous les surlignages hi-lock dans le tampon.

Si c'était une chose unique, cela pourrait être fait rapidement par M-: (unhighlight-regexp t)ou C-u M-s h u. Mais il semble que c'est quelque chose que vous devez faire assez souvent. Dans ce cas, il est préférable de l'envelopper dans une interactivefonction et de la lier à une clé.

Ci-dessous est une solution proposée où se my/unhighlight-all-in-buffertrouve la fonction interactive wrapper et à laquelle elle est liée hUdans le search-map. Par défaut, le search-mappréfixe est M-s. Alors maintenant, tout comme les M-s h ulancements unhighlight-regexp, M-s h U(notez le U majuscule) les lancements my/unhighlight-all-in-buffer.

(require 'hi-lock)        
(defun my/unhighlight-all-in-buffer ()
  "Remove all highlights made by `hi-lock' from the current buffer.
The same result can also be be achieved by \\[universal-argument] \\[unhighlight-regexp]."
  (interactive)
  (unhighlight-regexp t))
(define-key search-map "hU" #'my/unhighlight-all-in-buffer)

Existe-t-il une meilleure façon de mettre en surbrillance un symbole au point?

La bonne chose est que vous n'avez pas besoin de placer le point sur un symbole que vous devez mettre en surbrillance.

Vous appelez simplement M-x unhighlight-regexpou M-s h u(sa liaison par défaut) et appuyez sur M-p/ M-njusqu'à ce que vous tombiez sur l'expression rationnelle du symbole que vous devez mettre en surbrillance, puis appuyez sur Entrée.

Kaushal Modi
la source
4

Une autre façon consiste à utiliser la bibliothèque Highlight ( highlight.el), les commandes hlt-highlight-symbol-at-pointet hlt-unhighlight-symbol-at-point.

Ils sont liés par défaut à C-x X h set C-x X u s, respectivement. Toutes les commandes de mise en surbrillance et de mise en surbrillance sont liées C-x Xpar défaut à la clé de préfixe . Les commandes de surbrillance utilisent la touche préfixe C-x X h. Les commandes non mises en surbrillance utilisent la clé de préfixe C-x X u. Vous pouvez utiliser une clé de préfixe différente de celle C-x Xsimplement liée à la commande prefix hlt-map.

Surbrillance dans la bibliothèque Highlight peut utiliser des superpositions ou des propriétés de texte (ou les deux). La mise en évidence du visage ou de la couleur peut être choisie automatiquement (à partir d'une séquence personnalisée de visages et de couleurs) ou non.

La mise en surbrillance peut utiliser une propriété font-lock-face, de sorte qu'elle est contrôlée par le mode de verrouillage des polices. Ou il peut utiliser une propriété face, de sorte qu'il ne soit pas contrôlé par elle. (Vous pouvez utiliser la propriété facepour mettre en surbrillance dans les tampons qui n'utilisent pas le verrouillage de police, et la mise en surbrillance reste dans les tampons verrouillés par police lorsque vous désactivez le mode de verrouillage de police.)

A dessiné
la source
4

C-u C-x w r

(unhighlight-regexp REGEXP) (...) Si REGEXP est t (ou s'il a C-u été spécifié de manière interactive), supprimez tous les surlignages hi-lock.

rofrol
la source
0

Cela mettra en surbrillance un seul symbole:

(defun unhighlight-symbol-at-point ()
  "Remove highlight of symbol at point."
  (interactive)
  (unhighlight-regexp (concat "\\_<" (thing-at-point 'symbol) "\\_>")))
marque
la source