Cómo resaltar el símbolo resaltado con el símbolo de resaltado en el punto

13

highlight-symbol-at-point es realmente útil, sin embargo, no pude encontrar una manera fácil de desmarcar símbolos.

Actualmente tengo que llamar unhighlight-regexprepetidamente por cada símbolo resaltado.

¿Hay una mejor manera de:

  • resalte todos los símbolos resaltados en un búfer
  • ¿Destacar un símbolo en el punto?
kostya
fuente
¿Necesita desmarcar todos los símbolos de una vez?
Kaushal Modi
La mayoría de las veces, sí. Ocasionalmente, desmarcar un símbolo en el punto también es útil.
kostya
Las respuestas serían diferentes si desea desmarcar el símbolo debajo del punto o desmarcar todos los símbolos.
Kaushal Modi
He actualizado mi pregunta
kostya
2
Puede eliminar todos los símbolos resaltados utilizandoM-x hi-lock-mode
Amir Karimi

Respuestas:

10

¿Hay una mejor manera de resaltar todos los símbolos resaltados en un búfer?

De C-h f unhighlight-regexp, obtenemos

(unhighlight-regexp REGEXP)

Elimine el resaltado de cada coincidencia a REGEXP establecido por hi-lock. Interactivamente, solicite REGEXP, aceptando solo expresiones regulares previamente insertadas por funciones interactivas de bloqueo alto. Si REGEXP es t (o si Cu se especificó de forma interactiva), elimine todo el resaltado de bloqueo alto.

Eso significa que simplemente necesidad de llamar unhighlight-regexpcon tcomo argumento para eliminar todo el hi-lock destacando en el búfer.

Si fuera una cosa de una sola vez, podría hacerse rápidamente por M-: (unhighlight-regexp t)o C-u M-s h u. Pero parece que esto es algo que debe hacer con bastante frecuencia. En ese caso, es mejor envolverlo en una interactivefunción y vincularlo a alguna tecla.

A continuación se muestra una solución propuesta donde my/unhighlight-all-in-bufferestá la función interactiva del contenedor y está vinculada hUen el search-map. Por defecto el search-mapprefijo es M-s. Así que ahora, al igual que los M-s h ulanzamientos unhighlight-regexp, M-s h U(nota la U mayúscula) se lanza 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)

¿Hay una mejor manera de resaltar un símbolo en el punto?

Lo bueno es que no necesita colocar el punto en un símbolo que necesita resaltar.

Simplemente llame M-x unhighlight-regexpo M-s h u(su enlace predeterminado) y presione M-p/ M-nhasta que encuentre la expresión regular del símbolo que necesita para resaltar, y presione Entrar.

Kaushal Modi
fuente
4

Otra forma es usar la biblioteca Highlight ( highlight.el), comandos hlt-highlight-symbol-at-pointy hlt-unhighlight-symbol-at-point.

Están vinculados por defecto a C-x X h sy C-x X u s, respectivamente. Todos los comandos de resaltado y resaltado están vinculados en la tecla de prefijo C-x Xde forma predeterminada. Los comandos de resaltado usan la tecla de prefijo C-x X h. Unhighlighting comandos utilizan tecla prefijo C-x X u. Puede usar una clave de prefijo diferente que C-x Xsimplemente vinculándola al comando de prefijo hlt-map.

Resaltado en la biblioteca Highlight puede usar superposiciones o propiedades de texto (o ambas). La cara o el color de resaltado se puede elegir automáticamente (de una secuencia personalizada de caras y colores) o no.

El resaltado puede usar la propiedad font-lock-face, de modo que se controla mediante el modo de bloqueo de fuente. O puede usar la propiedad face, para que no sea controlada por ella. (Puede usar la propiedad facepara resaltar en buffers que no usan bloqueo de fuente, y el resaltado permanece en buffers de bloqueo de fuente cuando desactiva el modo de bloqueo de fuente).

Dibujó
fuente
4

C-u C-x w r

(unhighlight-regexp REGEXP) (...) Si REGEXP es t (o si C-u se especificó de forma interactiva), elimine todo el resaltado de bloqueo alto.

rofrol
fuente
0

Esto resaltará un solo símbolo:

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