Cara unhighlight simbol disorot dengan highlight-symbol-at-point

13

highlight-symbol-at-point benar-benar berguna namun saya tidak dapat menemukan cara mudah untuk menghapus tanda simbol.

Saat ini saya harus menelepon unhighlight-regexpberulang kali untuk setiap simbol yang disorot.

Apakah ada cara yang lebih baik untuk:

  • unhighlight semua simbol yang disorot dalam buffer
  • unhighlight simbol pada titik?
kostya
sumber
Apakah Anda perlu menyorot semua simbol sekaligus?
Kaushal Modi
Sebagian besar waktu, ya. Kadang-kadang menyoroti simbol pada titik berguna juga.
kostya
Jawabannya akan berbeda jika Anda ingin menyoroti simbol di bawah titik atau menyoroti semua simbol.
Kaushal Modi
Saya telah memperbarui pertanyaan saya
kostya
2
Anda dapat menghapus semua simbol yang disorot menggunakanM-x hi-lock-mode
Amir Karimi

Jawaban:

10

Apakah ada cara yang lebih baik untuk menyoroti semua simbol yang disorot dalam buffer?

Dari C-h f unhighlight-regexp, kita dapatkan

(unhighlight-regexp REGEXP)

Hapus sorotan setiap pertandingan ke REGEXP yang diatur oleh hi-lock. Secara interaktif, minta REGEXP, hanya menerima regexps yang sebelumnya disisipkan oleh fungsi interaktif hi-lock. Jika REGEXP adalah t (atau jika Cu ditentukan secara interaktif), maka hapus semua sorotan kunci-tinggi.

Itu berarti bahwa kita hanya perlu memanggil unhighlight-regexpdengan tsebagai argumennya untuk menghapus semua highlight hi-lock di buffer.

Jika itu hanya satu kali, itu bisa dengan cepat dilakukan oleh M-: (unhighlight-regexp t)atau C-u M-s h u. Tetapi sepertinya ini adalah sesuatu yang perlu Anda lakukan cukup sering. Dalam hal ini, lebih baik membungkusnya dalam suatu interactivefungsi dan mengikatnya ke beberapa tombol.

Di bawah ini adalah solusi yang diusulkan di mana my/unhighlight-all-in-bufferfungsi interaktif wrapper dan terikat hUpada search-map. Secara default search-mapawalannya adalah M-s. Jadi sekarang, sama seperti M-s h upeluncuran unhighlight-regexp, M-s h U(perhatikan ibukota U) diluncurkan 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)

Apakah ada cara yang lebih baik untuk menyoroti simbol pada titik?

Hal yang baik adalah bahwa Anda tidak perlu menempatkan titik pada simbol yang harus Anda sorot.

Anda cukup memanggil M-x unhighlight-regexpatau M-s h u(penjilidan bawaannya) dan menekan M-p/ M-nsampai Anda menemukan regexp dari simbol yang Anda perlukan untuk menyoroti, dan tekan Enter.

Kaushal Modi
sumber
4

Cara lain adalah dengan menggunakan Highlight perpustakaan ( highlight.el), perintah hlt-highlight-symbol-at-pointdan hlt-unhighlight-symbol-at-point.

Mereka terikat default untuk C-x X h sdan C-x X u s, masing-masing. Semua perintah penyorotan dan penyorotan terikat pada kunci awalan C-x Xsecara default. Menyoroti perintah menggunakan kunci awalan C-x X h. Perintah yang tidak menyoroti menggunakan kunci awalan C-x X u. Anda dapat menggunakan kunci awalan yang berbeda dari C-x Xhanya dengan mengikatnya ke perintah awalan hlt-map.

Menyoroti di perpustakaan Sorotan dapat menggunakan overlay atau properti teks (atau keduanya). Wajah atau warna yang disorot dapat dipilih secara otomatis (dari urutan wajah dan warna yang disesuaikan) atau tidak.

Menyoroti dapat menggunakan properti font-lock-face, sehingga dikendalikan oleh mode Font Lock. Atau bisa menggunakan properti face, sehingga tidak dikontrol olehnya. (Anda dapat menggunakan properti faceuntuk menyorot dalam buffer yang tidak menggunakan font-lock, dan penyorotan tetap dalam buffer yang dikunci font ketika Anda mematikan mode Kunci Font.)

Drew
sumber
4

C-u C-x w r

(unhighlight-regexp REGEXP) (...) Jika REGEXP adalah t (atau jika C-u ditentukan secara interaktif), maka hapus semua sorotan kunci-tinggi.

rofrol
sumber
0

Ini akan menyoroti simbol tunggal:

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