Emacs बफर में किसी शब्द की सभी घटनाओं को कैसे उजागर किया जाए?


83

नोटपैड ++ में एक सुविधाजनक सुविधा है: यदि आप अपने पाठ में एक शब्द का चयन करते हैं (जरूरी नहीं कि एक कीवर्ड), शब्द पूरे पाठ में हाइलाइट किया गया है। क्या यह Emacs में भी हो सकता है? और यदि हां, तो कैसे?

यह जरूरी नहीं कि नोटपैड ++ की तरह काम किया जाए (यानी, चयन के माध्यम से); आदर्श रूप से, मैं एक मुख्य बाइंडिंग सेट करना चाहूंगा जो कर्सर के नीचे शब्द की सभी घटनाओं को उजागर करता है।

यह बहुत अच्छा होगा यदि हाइलाइट्स स्थायी थे, यानी हाइलाइट किए गए शब्द से दूर जाने के कारण हाइलाइट को हटाने का कारण नहीं होना चाहिए ।

इसके अलावा, यह उपयोगी होगा यदि कोई समाधान था जिसने हाइलाइट्स (कस्टम कुंजी बाइंडिंग का उपयोग करके) के बीच नेविगेट करना संभव बनाया।

जवाबों:


41

हो सकता है कि http://nschum.de/src/emacs/highlight-symbol/ पर हाइलाइट-सिंबल।

वैकल्पिक शब्द


1
मैंने इसे आजमाया, लेकिन यह काम नहीं कर सका - Emacs ने शिकायत की "प्रतीक का मान वैरिएबल शून्य है: हाइलाइट-सिंबल-आइडल-डिले"।
हेडक्रैब

1
मुझे वह विशेष समस्या लगी। मैंने पहले (डिफक्यूट हाइलाइट-सिंबल-आइडल-डिले ...) पार्ट, और मूव (डिफर्व हाइलाइट-सिंबल-आइडल-डिले ...) को डिफाइन किया है। ), जो त्रुटि से बच जाएगा।
पॉलीग्लॉट

1
हां, आखिरकार मैंने वही सटीक काम किया।
हेडक्रैब

1
क्षमा करें, लेकिन मुझे इस कार्य के लिए बाहरी पैकेज जोड़ने की आवश्यकता नहीं है! देखें जर्कवे की पोस्ट।
mefiX

4
@mefiX: बिल्ड-इन फ़ंक्शन एकल उपयोगों के लिए अच्छा है। बाहरी पैकेज केवल 1 कीस्ट्रोक के साथ कर्सर के तहत शब्द को उजागर करने वाले (दूसरों के बीच) की सुविधा को जोड़ता है, साथ ही विभिन्न शब्दों के लिए स्वचालित रूप से हाइलाइटिंग रंग भी बदलता है। हां, आप बिल्ट-इन फ़ंक्शन के साथ ऐसा कर सकते हैं, लेकिन कुछ सेकंड और कीस्ट्रोक्स के बजाय मिनट और सैकड़ों कीस्ट्रोके क्यों बर्बाद करें, अगर ऐसा कुछ है जो आप अक्सर करते हैं? जो कोई भी डाउनवोट संकीर्ण-दृष्टि से लगता है: किसी को यह पैकेज उपयोगी लग सकता है, भले ही आप न करें।
पॉलीग्लॉट

85

hi-lockसुझाव अच्छे हैं। मुझे लगता है कि M-xसंस्करणों का उपयोग करना आसान है , हालांकि:

M-x highlight-regexp RET <REGEXP>

M-x highlight-phrase RET <REGEXP>

highlight-phraseबस चीनी के आसपास है highlight-regexpकि मामले को नजरअंदाज करता है और मनमाने ढंग से व्हाट्सएप से मिलान करने के लिए रेगेक्स में एक स्थान का अनुवाद करता है। हैंडी।


23
हाइलाइट्स को साफ़ करने के लिए, उपयोग करें: M-x unhighligh-regexकी-कॉर्ड: C-x w r... इसके अलावा, हाइलाइट-वाक्यांश पूरी तरह से असंवेदनशील नहीं है। केवल प्रारंभिक लोअर-केस लेटर्स (शब्दों के) ae ने केस को असंवेदनशील बना दिया। (मुझे लगता है कि यह fredबनाम से निपटने का इरादा था Fred) .. जैसे यह एक [Cc]at[ ]+[Dd]og
रेगीक्स

धन्यवाद, मुझे आपकी टिप्पणी अंतर्निर्मित मदद की तुलना में अंतर के बारे में स्पष्ट है।
जोशुआ गोल्डबर्ग

1
नोट: टाइपो: यह (लापता और ) के unhighlight-regexpबजाय होना चाहिए । unhighligh-regextp
ज़ेल्फिर कलस्टहल

36

टाइप करें C-s, फिर करंट वर्ड टाइप करें या टाइप करें C-w। बोनस के रूप में, अब आप C-sशब्द की खोज के लिए फिर से हिट कर सकते हैं ।

इसे वृद्धिशील खोज कहा जाता है ।


11
इसके लायक क्या है, मुझे अब इस सवाल के इरादे का एहसास है: आप चाहते हैं कि घटनाएँ "स्थायी रूप से" (जब तक आप इसे बंद न करें) हाइलाइट करें, तब भी जब आप अन्य काम जैसे घूमना, टाइप करना आदि करते हैं, तो इसके लिए Cs (वृद्धिशील खोज) ) काम नहीं करेगा (हाइलाइटिंग "अस्थायी" है; आप बफर के बारे में आगे बढ़ सकते हैं लेकिन नया संपादन कार्य करना कठिन है)। मैं M-x highlight-regexpसमाधान का उपयोग करता हूं (और उखाड़ा है) और (इसे शॉर्टकट के लिए बाध्य करता हूं )।
श्रीवत्सआर

15

मैं जो प्रयोग कर रहा हूं वह निष्क्रिय है

http://www.emacswiki.org/emacs/IdleHighlight

Mx निष्क्रिय-हाइलाइट एक निष्क्रिय टाइमर सेट करता है जो बिंदु के तहत शब्द के बफर में सभी घटनाओं को उजागर करता है।

सभी प्रोग्रामिंग मोड के लिए इसे सक्षम करने के लिए ~/.emacs.d/init.el:

;; highlight words
(add-hook 'prog-mode-hook (lambda () (idle-highlight-mode t)))

लैम्बडा के अंदर के हुक के साथ मेरी कुछ विसंगतियां हैं। शायद डिफ्यूज कहने पर विचार करें।
डेरिल हेब्ब्स ने

10

लाइट-सिंबल जो भी प्रतीक बिंदु है, उस पर प्रकाश डालेगा।

वैकल्पिक रूप से, आप उपयोग कर सकते हैं , जो एक रेक्सएक्सपी से मेल खाने वाली सभी लाइनों को सूचीबद्ध करता है। किसी कक्षा में सभी कार्यों को जल्दी से देखना उपयोगी है।


यह बहुत अच्छा लगता है, लेकिन यह कैसे पता चलता है कि यह एक ही प्रतीक या एक ही नाम के साथ एक और प्रतीक मिला है?
नमस्तेगुडबिन

6

Http://www.emacswiki.org/emacs/msearch.el कोशिश करें कि कर्सर के साथ चुने गए पाठ की सभी घटनाओं को उजागर किया जाए। आपको उस स्ट्रिंग को खींचना होगा जिसे आप हाइलाइट करना चाहते हैं। यह आपको हाइलाइट को बदलने के बिना आसानी से चयन को बदलने में सक्षम बनाता है।

यदि आप एक स्ट्रिंग के हाइलाइटिंग को संरक्षित करना चाहते हैं तो आप इसे फ्रीज कर सकते हैं।

आप किसी बफ़र को दूसरे बफ़र के लिए ग़ुलाम बना सकते हैं। मास्टर बफ़र में चयनित पाठ को दास बफ़र में भी हाइलाइट किया जाएगा। जो बफ़र्स की तुलना करने के लिए उपयोगी है। यह एक बफर में नोट्स लेने के लिए भी उपयोगी है जबकि आप दूसरे में टेक्स्ट की जांच करते हैं। आपके पास नोट्स बफर में कीवर्ड का एक संग्रह हो सकता है। ऐसे कीवर्ड पर खींचें और जांच की गई पाठ में इसकी घटनाओं पर प्रकाश डाला जाएगा।

मैं इस सामान का उपयोग वर्षों से कर रहा हूं। मैंने ठंड को हाल ही में जोड़ा है। तो, शायद कुछ टूट गया है। यदि यह मामला है तो मुझे http://www.emacswiki.org/emacs/msearch या यहाँ पर एक नोट छोड़ दें ।


5

यह उतना अच्छा नहीं हो सकता है जितना आप उम्मीद कर रहे थे लेकिन अगर आप डाल रहे हैं

(global-hi-lock-mode 1)

अपनी .emacsफ़ाइल में तब आप C-x w h REGEX <RET> <RET>सभी घटनाओं को हाइलाइट करने के लिए टाइप कर सकते हैं REGEX, और C-x w r REGEX <RET>उन्हें फिर से अनसुना कर सकते हैं। फिर से, उतना सुंदर नहीं, जितना आप चाहते हैं, लेकिन यह काम करेगा।


5

इंटरएक्टिव हाइलाइटिंग की जाँच करें

होना चाहिए:

C- x w hशब्द<RET> <RET>


1
पहले, हाय-लॉक-मोड को Mx हाय-लॉक-मोड द्वारा सक्षम किया जाना चाहिए। फिर, यह काम करता है। इंटरैक्टिव हाइलाइटिंग के लिए Btw लिंक मृत है। अब यह यहाँ है: gnu.org/software/emacs/manual/html_node/emacs/…
एस्पिरिन

5

किसी ने भी symbol-overlayविधा का उल्लेख नहीं किया । यह मूल रूप से एक बेहतर पुनर्लेखन है highlight-symbol-mode। "बेहतर" के रूप में, मूल हाइलाइट-प्रतीक (जैसे कि, अस्थायी हाइलाइट अटक जाते हैं, या हाइलाइट किए गए शब्द के अंदर जाने के लिए गायब हो रहा है, या प्रतीकों को हाइलाइट करने में सक्षम नहीं होने के कारण *) , बेहतर एकीकृत और बनाए रखा जाता है। इसके README के ​​"लाभ" पैराग्राफ देखें।

आप इसे हमेशा की तरह स्थापित कर सकते हैं, M-xpackage-install (पहले से पैकेज सूची अपडेट करना सुनिश्चित करें package-list-packages) । संदर्भ के लिए, नीचे मैं संलग्न कोड मैं मोड को सक्षम करने के लिए उपयोग करता हूं और कुछ अधिक उन्नत सुविधाओं को अक्षम करता हूं जो आप कर सकते हैं या नहीं चाहते हैं।

नोटपैड ++ में एक सुविधाजनक सुविधा है: यदि आप अपने पाठ में एक शब्द का चयन करते हैं (जरूरी नहीं कि एक कीवर्ड), शब्द पूरे पाठ में हाइलाइट किया गया है। क्या यह Emacs में भी हो सकता है? और यदि हां, तो कैसे?

एक बार जब आप सक्षम हो जाते हैं overlay-symbol, तो स्क्रीन पर होने वाली घटनाओं को हर उस शब्द के लिए दिखाया जाएगा, जिसे आप टाइमआउट के बाद कर्सर रखते हैं (डिफ़ॉल्ट रूप से टाइमआउट 0.5s है, जिसे symbol-overlay-idle-timeवेरिएबल से कॉन्फ़िगर किया जा सकता है ) । यदि कोई शब्द हाइलाइट नहीं होता है, तो इसका मतलब है कि स्क्रीन पर सिर्फ एक मैच है (एक जिसे आप कर्सर डालते हैं) , इसलिए इसे हाइलाइट करने की कोई आवश्यकता नहीं है।

यह बहुत अच्छा होगा यदि हाइलाइट्स स्थायी थे, यानी हाइलाइट किए गए शब्द से दूर जाने के कारण हाइलाइट को हटाने का कारण नहीं होना चाहिए।

शब्द के तहत कर्सर को स्थायी रूप से हाइलाइट करने के लिए एक फ़ंक्शन है symbol-overlay-put। एक बार फिर से कॉल करने के लिए।

मेरे विन्यास उदाहरण में यह Logo+ `कुंजी से जुड़ा है ।


(require 'symbol-overlay)
(defun enable-symbol-overlay-mode ()
  (unless (or (minibufferp)
              (derived-mode-p 'magit-mode)
              (derived-mode-p 'xref--xref-buffer-mode))
    (symbol-overlay-mode t)))
(define-global-minor-mode global-symbol-overlay-mode ;; name of the new global mode
  symbol-overlay-mode                                ;; name of the minor mode
  enable-symbol-overlay-mode)
(global-symbol-overlay-mode)                         ;; enable it
(global-set-key (kbd "s-`") 'symbol-overlay-put)
(setq symbol-overlay-ignore-functions nil)           ;; don't ignore keywords in various languages
(setq symbol-overlay-map (make-sparse-keymap))       ;; disable special cmds on overlays

symbol-overlay-modeवास्तव में मैं क्या देख रहा था। बाइंडिंग symbol-overlay-putएक एफ कुंजी करने के लिए फ़ाइल भर में दिए गए शब्द का मुख्य आकर्षण टॉगल के लिए आसान है।
मैट क्नीज़र

2

पुस्तकालय में कमांड highlight.el आपको ओवरले या पाठ गुणों का उपयोग करते हुए एक regexp (इस मामले में एक प्रतीक) से मेल खाते टेक्स्ट को उजागर करते हैं। आप घटनाओं के बीच चक्र कर सकते हैं। हाइलाइटिंग अस्थायी या लगातार हो सकता है। (अधिक जानकारी)


2

प्रयास करें iedit । यह शब्द को बिंदु पर हाइलाइट करता है और आपको इसकी सभी घटनाओं को आसानी से संपादित करने देता है। एक अतिरिक्त कीस्ट्रोक (C- ') के साथ, यह उस शब्द के बिना सभी लाइनों को छुपाता है। बेहद सुविधाजनक!


0

यह शायद हाइलाइट नहीं होगा, लेकिन एक शब्द की खोज के बिना आपको इसे टाइप करने की आवश्यकता होगी ...

जब आप उस शब्द तक पहुंच गए हैं जिसे आप सीएस को खोजना चाहते थे, तो सीडब्ल्यू के साथ पूरा शब्द पढ़ें फिर आप सीएस कर सकते हैं और इसे खोजेंगे। मेरे Emacs में यह दस्तावेज़ में सभी उदाहरणों पर प्रकाश डालता है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.