วิธีไฮไลต์สัญลักษณ์ไฮไลต์ด้วยไฮไลต์สัญลักษณ์ที่จุด


14

highlight-symbol-at-point มีประโยชน์จริง ๆ แต่ฉันไม่สามารถหาวิธีที่ง่ายในการยกเลิกการเน้นสัญลักษณ์

ขณะนี้ฉันต้องโทรunhighlight-regexpซ้ำสำหรับสัญลักษณ์ที่เน้นแต่ละอัน

มีวิธีที่ดีกว่าในการ:

  • ไม่ไฮไลต์สัญลักษณ์ที่ไฮไลต์ทั้งหมดในบัฟเฟอร์
  • unhighlight สัญลักษณ์ที่จุดหรือไม่

คุณจำเป็นต้องไฮไลต์สัญลักษณ์ทั้งหมดในครั้งเดียวหรือไม่?
Kaushal Modi

ส่วนใหญ่เวลา - ใช่ สัญลักษณ์ที่จุดแสงในบางครั้งเป็นประโยชน์เช่นกัน
kostya

คำตอบจะแตกต่างกันถ้าคุณต้องการ unhighlight สัญลักษณ์ภายใต้จุดหรือ unhighlight สัญลักษณ์ทั้งหมด
Kaushal Modi

ฉันได้อัปเดตคำถามของฉันแล้ว
kostya

2
คุณสามารถลบสัญลักษณ์ที่ไฮไลต์ได้ทั้งหมดโดยใช้M-x hi-lock-mode
Amir Karimi

คำตอบ:


11

มีวิธีที่ดีกว่าในการไฮไลต์สัญลักษณ์ที่เน้นสีทั้งหมดในบัฟเฟอร์หรือไม่?

จากที่C-h f unhighlight-regexpเราได้รับ

(REGEXP unhlightlight-regexp)

ลบไฮไลต์ของการแข่งขันแต่ละรายการเป็น REGEXP ที่กำหนดโดย hi-lock โต้ตอบพร้อมท์สำหรับ REGEXP ยอมรับเฉพาะ regexps ที่แทรกไว้ก่อนหน้านี้โดยฟังก์ชั่นโต้ตอบแบบ 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จนกว่าคุณจะเจอ regexp ของสัญลักษณ์ที่คุณจำเป็นต้องไฮไลต์และกด Enter


4

อีกวิธีหนึ่งคือการใช้ห้องสมุดHighlight ( highlight.el) คำสั่งและhlt-highlight-symbol-at-pointhlt-unhighlight-symbol-at-point

พวกเขาถูกผูกไว้เริ่มต้นC-x X h sและC-x X u sตามลำดับ คำสั่งการไฮไลต์และการไฮไลต์ทั้งหมดถูกผูกไว้กับคีย์คำนำหน้าC-x Xโดยค่าเริ่มต้น C-x X hคำสั่งการเน้นใช้คีย์คำนำหน้า คำสั่ง Unhighlighting C-x X uใช้คีย์คำนำหน้า คุณสามารถใช้คีย์คำนำหน้าแตกต่างกว่าโดยเพียงแค่ผูกพันกับคำสั่งคำนำหน้าC-x Xhlt-map

การไฮไลต์ในไลบรารีไฮไลต์สามารถใช้การซ้อนทับหรือคุณสมบัติข้อความ (หรือทั้งสองอย่าง) สามารถเลือกใบหน้าหรือสีที่ไฮไลต์ได้โดยอัตโนมัติ (จากลำดับของใบหน้าและสีที่กำหนดเอง) หรือไม่

การไฮไลต์สามารถใช้คุณสมบัติfont-lock-faceเพื่อควบคุมโดยโหมดล็อคแบบอักษร หรือสามารถใช้คุณสมบัติfaceเพื่อที่จะไม่ถูกควบคุมโดยมัน (คุณสามารถใช้คุณสมบัติfaceเพื่อเน้นในบัฟเฟอร์ที่ไม่ใช้ล็อคแบบอักษรและไฮไลต์ยังคงอยู่ในบัฟเฟอร์ล็อคแบบอักษรเมื่อคุณปิดโหมดล็อคแบบอักษร)


4

C-u C-x w r

(unhighlight-regexp REGEXP) (... ) หาก REGEXP เป็น t (หรือหากC-u ระบุไว้แบบโต้ตอบ) ให้ลบไฮไลต์ hi-lock ทั้งหมด


0

นี่จะเป็นการไฮไลต์สัญลักษณ์เดียว:

(defun unhighlight-symbol-at-point ()
  "Remove highlight of symbol at point."
  (interactive)
  (unhighlight-regexp (concat "\\_<" (thing-at-point 'symbol) "\\_>")))
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.