Как отменить выделение символа, выделенного с помощью highlight-symbol-at-point

13

highlight-symbol-at-point действительно полезно, однако я не мог найти простой способ отменить выделение символов.

В настоящее время мне приходится звонить unhighlight-regexpповторно для каждого выделенного символа.

Есть ли лучший способ:

  • отменить выделение всех выделенных символов в буфере
  • Выделить символ в точке?
Kostya
источник
Вам нужно выделить все символы за один раз?
Каушал Моди
Большую часть времени - да. Время от времени выделение символа в точке также полезно.
Костя
Ответы могут быть другими, если вы хотите, чтобы подсветка символа не была выделена или все символы были выделены.
Каушал Моди
Я обновил свой вопрос
Костя
2
Вы можете удалить все выделенные символы, используяM-x hi-lock-mode
Амир Карими

Ответы:

10

Есть ли лучший способ отменить выделение всех выделенных символов в буфере?

От C-h f unhighlight-regexp, мы получаем

(unhighlight-regexp REGEXP)

Убрать выделение каждого совпадения с помощью REGEXP, установленного hi-lock. В интерактивном режиме запрашивает REGEXP, принимая только регулярные выражения, ранее вставленные интерактивными функциями hi-lock. Если REGEXP равен t (или Cu был задан в интерактивном режиме), удалите все выделения hi-lock.

Это означает , что мы просто нужно позвонить unhighlight-regexpс в tкачестве аргумента , чтобы удалить все привет-блокировку подсветки в буфере.

Если бы это была одноразовая вещь, это могло бы быть быстро сделано M-: (unhighlight-regexp t)или C-u M-s h u. Но кажется, что это то, что вам нужно делать довольно часто. В этом случае лучше обернуть его в interactiveфункцию и привязать к некоторой клавише.

Ниже предложено решение , в котором my/unhighlight-all-in-bufferнаходится интерактивная функция обертки и она обязана hUв search-map. По умолчанию search-mapпрефикс является M-s. Так что теперь, так же, как M-s h uзапускает unhighlight-regexp, M-s h U(обратите внимание на заглавную U) запускает 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)

Есть ли лучший способ выделить символ в точке?

Хорошо, что вам не нужно ставить точку на символе, который нужно выделить.

Вы просто вызываете M-x unhighlight-regexpили M-s h u(его привязка по умолчанию) и нажимаете M-p/, M-nпока не встретите регулярное выражение символа, который нужно выделить, и нажмите Enter.

Каушал Моди
источник
4

Другой способ - использовать библиотеку Highlight ( highlight.el), команды hlt-highlight-symbol-at-pointи hlt-unhighlight-symbol-at-point.

Они связаны по умолчанию C-x X h sи C-x X u s, соответственно. Все команды выделения и отмены выделения C-x Xпо умолчанию связаны с префиксом . Команды выделения используют префикс ключа C-x X h. Небольшие команды используют префиксный ключ C-x X u. Вы можете использовать другой префиксный ключ, чем C-x Xпросто связать его с префиксной командой hlt-map.

Подсветка в библиотеке. Подсветка может использовать наложения или текстовые свойства (или оба). Выделение лица или цвета может быть выбрано автоматически (из настраиваемой последовательности лиц и цветов) или нет.

Выделение может использовать свойство font-lock-face, так что оно управляется режимом Font Lock. Или он может использовать свойство face, чтобы оно им не контролировалось. (Вы можете использовать свойство faceдля выделения в буферах, которые не используют блокировку шрифтов, а выделение остается в буферах с блокировкой шрифтов при выключении режима блокировки шрифтов.)

Нарисовалась
источник
4

C-u C-x w r

(unhighlight-regexp REGEXP) (...) Если REGEXP равен t (или C-u был задан в интерактивном режиме), тогда удалите все выделения hi-lock.

rofrol
источник
0

Это выделит один символ:

(defun unhighlight-symbol-at-point ()
  "Remove highlight of symbol at point."
  (interactive)
  (unhighlight-regexp (concat "\\_<" (thing-at-point 'symbol) "\\_>")))
отметка
источник