Como destacar o símbolo de destaque realçado com o símbolo de destaque no ponto

13

highlight-symbol-at-point é realmente útil, no entanto, não consegui encontrar uma maneira fácil de destacar os símbolos.

Atualmente, tenho que ligar unhighlight-regexprepetidamente para cada símbolo destacado.

Existe uma maneira melhor de:

  • destacar todos os símbolos destacados em um buffer
  • destacar um símbolo no ponto?
Kostya
fonte
Você precisa destacar todos os símbolos de uma só vez?
Kaushal Modi 27/01
Na maioria das vezes - sim. Ocasionalmente, destacar um símbolo no ponto também é útil.
Kostya
As respostas seriam diferentes se você deseja destacar o símbolo sob o ponto ou destacar todos os símbolos.
Kaushal Modi 27/01
Eu atualizei a minha pergunta
kostya
2
Você pode remover todos os símbolos destacados usandoM-x hi-lock-mode
Amir Karimi

Respostas:

10

Existe uma maneira melhor de destacar todos os símbolos destacados em um buffer?

De C-h f unhighlight-regexp, temos

(REGEXP de unhighlight-regexp)

Remova o realce de cada correspondência para REGEXP definido por hi-lock. Interativamente, solicite REGEXP, aceitando apenas regexps inseridos anteriormente por funções interativas hi-lock. Se REGEXP for t (ou se Cu foi especificado interativamente), remova todo o destaque do hi-lock.

Isso significa que nós simplesmente necessidade de chamar unhighlight-regexpcom tcomo seu argumento para remover todos os oi-lock destacando no buffer.

Se fosse algo único, poderia ser feito rapidamente por M-: (unhighlight-regexp t)ou C-u M-s h u. Mas parece que isso é algo que você precisa fazer com bastante frequência. Nesse caso, é melhor agrupá-lo em uma interactivefunção e vinculá-lo a alguma chave.

Abaixo está uma solução proposta em que my/unhighlight-all-in-bufferestá a função interativa do wrapper e está vinculada hUa search-map. Por padrão, o search-mapprefixo é M-s. Então, agora, assim como M-s h ulançamentos unhighlight-regexp, M-s h U(note a capital U) lançamentos 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 uma maneira melhor de destacar um símbolo no momento?

O bom é que você não precisa colocar o ponto em um símbolo que precisa destacar.

Você simplesmente chama M-x unhighlight-regexpou M-s h u(sua ligação padrão) e pressiona M-p/ M-naté encontrar a expressão regular do símbolo que precisa destacar, e pressione Enter.

Kaushal Modi
fonte
4

Outra maneira é usar a biblioteca Highlight ( highlight.el), comandos hlt-highlight-symbol-at-pointe hlt-unhighlight-symbol-at-point.

Eles são vinculados por padrão a C-x X h se C-x X u s, respectivamente. Todos os comandos de realce e não realce são vinculados à chave de prefixo C-x Xpor padrão. Os comandos de destaque usam chave de prefixo C-x X h. Os comandos de realce usam chave de prefixo C-x X u. Você pode usar uma chave de prefixo diferente C-x Xda vinculando-a ao comando prefix hlt-map.

Destacar na biblioteca O destaque pode usar sobreposições ou propriedades de texto (ou ambas). A face ou cor de destaque pode ser escolhida automaticamente (a partir de uma sequência personalizada de faces e cores) ou não.

O destaque pode usar a propriedade font-lock-face, para que seja controlado pelo modo de bloqueio de fonte. Ou pode usar a propriedade face, para que não seja controlada por ela. (Você pode usar a propriedade facepara realçar nos buffers que não usam o bloqueio de fonte, e o realce permanece nos buffers de fonte quando você desativa o modo de bloqueio de fonte.)

Desenhou
fonte
4

C-u C-x w r

(unhighlight-regexp REGEXP) (...) Se REGEXP for t (ou se tiver C-u sido especificado interativamente), remova todo o destaque do hi-lock.

rofrol
fonte
0

Isso destacará um único símbolo:

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