मैं एक जगह के बाद मैचों को हाइलाइट करने से कैसे बचता हूं?


13

मेरे पास है set hlsearchमेरे में ~/.vimrc। यह सामान्य रूप से बहुत उपयोगी है, लेकिन :nohमेरे द्वारा प्रतिस्थापित करने के बाद ऐसा करना कष्टप्रद है '<,'>s/$/',/( जैसे मैं चलाने के बाद हर पंक्ति के अंत को उजागर करता हूं)। vimइस तरह से बदलने के बाद मुझे कैसे उजागर नहीं करना है ?

मैं Ubuntu 9.04 पर vim7.2 के साथ हूं । मुझे OS X 10.6 ( vim7.2 भी ) पर यही समस्या है । कुछ ऐसा जो दोनों पर काम करता है वह वांछनीय होगा।

अद्यतन: मेरे द्वारा प्राप्त सभी उत्तर बस करने के लिए एक कुंजी मैपिंग जोड़ रहे हैं :noh(या समतुल्य)। मैं वास्तव में कस्टम कुंजी व्यवहारों से बचने की कोशिश करता हूं जो मुझे वास्तव में आदत हो जाएगी, लेकिन फिर मुझे उनके बिना बुरी तरह से विफल कर दें (जैसे एक दोस्त के कंप्यूटर पर, आदि)। मैं एक प्रतिस्थापन vimकरने के :nohबाद स्वचालित रूप से करना चाहूंगा । यही है, मैं केवल ( या कुछ अन्य मामलों hlsearchका उपयोग करते समय) चाहता हूं , लेकिन अन्य बार नहीं।/*

जवाबों:


7

यदि आप स्थायी रूप से अक्षम नहीं करना चाहते हैं, तो आप हाइलाइट को टॉगल करने के लिए एक कुंजी को बाँध सकते हैं जैसा कि इस उत्तर में स्टैकओवरफ़्लो पर एक समान प्रश्न का सुझाव दिया गया है ।

map  <F12> :set hls!<CR>
imap <F12> <ESC>:set hls!<CR>a
vmap <F12> <ESC>:set hls!<CR>gv

यदि आप हाइलाइट को स्थायी रूप से अक्षम करना चाहते हैं:

11.1. After I searched for a text with a pattern, all the matched text
      stays highlighted. How do I turn off the highlighting
      temporarily/permanently?

The 'hlsearch' option controls whether all the matches for the last
searched pattern are highlighted or not. By default, this option is not
enabled. If this option is set in a system-wide vimrc file, then you can
turn off the search highlighting by using the following command:

    :set nohlsearch

( VIM FAQ से )


2
मुझे इस विकल्प के बारे में पता था। मुद्दा यह है कि मैं आमतौर पर वह नहीं खोज रहा हूं जिसे मैं बदलना चाहता हूं, इसलिए यह उन मामलों में हाइलाइट करने के लिए व्यर्थ है जो मैं प्रतिस्थापित करता हूं। हालांकि, यह जब मैं के लिए बहुत उपयोगी है कर रहा हूँ , किसी चीज़ को खोजने तो मैं इसे जाने के लिए नहीं करना चाहते हैं पूरी तरह से दूर।
बेंजामिन ने

@ बैंजामिन: आपने इसके लिए खोज की थी। यही है: s करता है। एक पैटर्न के लिए खोज करता है और फिर मैच (तों) पर एक परिवर्तन करता है। उपयोग करना: नोहल सही समाधान है क्योंकि यह अगली खोज के प्रदर्शन तक वर्तमान खोज पैटर्न के आकर्षण को बंद कर देता है। यह 'खोज' विकल्प की स्थिति को बदलने या पिछले खोज शब्द के संग्रहीत मूल्य को प्रभावित किए बिना ऐसा करता है।
जैमेसन डे

2
@ जैमेसन: मैं समझता हूं कि यह एक खोज और प्रतिस्थापित है। यह सिर्फ इतना है कि मुझे इसकी जरूरत नहीं है कि इसे उजागर किया जाए। अधिकतर किसी बात से ज्यादा झुंझलाहट।
बेंजामिन

थोड़ी देर पहले, मैंने डिफ़ॉल्ट रूप से हाइलाइटिंग को बंद करना शुरू कर दिया और जब मैं चाहता हूं, तो इसे चालू कर दिया, जैसे आपने सुझाव दिया था। अभी भी सही नहीं है, लेकिन यह बेहतर है।
बेंजामिन

9

मेरे पास दो अलग-अलग समाधान हैं, दोनों बहुत अच्छे हैं, प्रत्येक में एक अलग-अलग व्यवहार है। मेरा पसंदीदा विकल्प 2 है:

  1. मेरी .vimrc में निम्नलिखित 2 लाइनें हैं:

    autocmd cursorhold * set nohlsearch
    autocmd cursormoved * set hlsearch
    

    यदि कर्सर नहीं चलता है और hlsearch को बंद कर देता है, तो पहले वाला टाइमआउट (कॉन्फ़िगर करने योग्य नहीं) की प्रतीक्षा करता है। दूसरा फिर से इसे चालू करता है यदि कर्सर फिर से चलता है।

    यह एक सही समाधान नहीं है, लेकिन यह मेरे लिए काम करता है (और जब टाइमआउट विन्यास योग्य होता है, तो यह एकदम सही हो जाएगा - अभी के लिए, टाइमआउट एक बिल्ट टाइमर से विम के लिए बंधा हुआ है।)

  2. या आप इन पंक्तियों को आजमा सकते हैं:

    autocmd cursorhold * set nohlsearch
    noremap n :set hlsearch<cr>n
    noremap N :set hlsearch<cr>N
    noremap / :set hlsearch<cr>/
    noremap ? :set hlsearch<cr>?
    

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


अपडेट के लिए धन्यवाद - इसे अभी तक नहीं देखा था। (लगता है जैसे आपने इसे भी जोड़ा; मजेदार बात है।) यह एक शांत अवधारणा है; मुझे इसके साथ खेलना होगा।
बेंजामिन

2. की चेतावनी यह है कि यह विजुअल मोड से Vकाम नहीं करता है
ब्रायस गुइंटा

मैंने निम्नलिखित के साथ विकल्प 1 में पहली पंक्ति को संशोधित किया है autocmd cursorhold * set nohlsearch | let @/ = "" यह हाइलाइट को हटाने के साथ ही खोज रजिस्टर को साफ करेगा। इस सेट के साथ ज्यादा समय नहीं बिताया है, लेकिन मैं इसे उन लोगों के लिए बाहर रखना चाहता हूं जो यहां समाप्त होते हैं।
बर्कले मार्टिनेज

2

हाइलाइटिंग से छुटकारा पाने के लिए मैं सिर्फ "/ asdf" ("asdf" फ़ाइल में नहीं है) टाइप करता हूं। मुझे पता है कि यह बहुत सरल है, लेकिन यह मेरे लिए काम करता है।


2
यह एक ही विचार है :noh, लेकिन यह हमेशा काम नहीं करता है। :) अजीब बात है कि आप इसका उल्लेख करते हैं, हालांकि: मेरे पास एक दोस्त होता था जो हमेशा अपना नाम टाइप करता था क्योंकि वह जो कुछ भी लिखता था उसमें "asdf" की तुलना में कम बार आता था। (किन्दा फनी, मुझे लगता है।)
बेंजामिन

सच। शायद मुझे याद होगा: नोह अगली बार।
ग्रेग ग्राहम

1

अपनी .vimrc फ़ाइल में निम्नलिखित डालें:

nnoremap <silent> <F11> :exe ":silent! normal /$^\r"<CR>

यह चुपचाप हाइलाइट किए गए खोज शब्द को छिपा देगा लेकिन :set hlsearchसुविधा को अक्षम नहीं करता है । यह अगली खोज पर फिर से सक्रिय होता है।


केवल इस उद्देश्य के लिए डिज़ाइन किए गए बिलिन कमांड का उपयोग करना बेहतर है -: नोहल। तब आप अपने खोज रजिस्टर की सामग्री को नहीं उड़ाते हैं, जिसका उपयोग अगले मैच में कूदने के लिए किया जाता है, एक पैटर्न का डिफ़ॉल्ट मूल्य जब कोई भी निर्दिष्ट नहीं होता है, आदि
जामेसन

हाँ, लेकिन इसने मुझे नाराज़ कर दिया है कि मेरी अगली खोज को माना नहीं गया। इसलिए मैं इस त्वरित समाधान के साथ आता हूं। यह गंदा भी हो सकता है लेकिन यह काम करता है। मुझे लगता है कि यह मेरे लिए स्वीकार्य है - भले ही मैं एक वास्तविक, बड़ी परियोजना के स्रोत कोड में "गंदी" चीजों का उपयोग नहीं करूंगा।
ग्रेगर मुल्लेगेजर

1

एक और संभावना @/प्रतिस्थापन करने के बाद रजिस्टर (जो वास्तव में एक रीड-राइट रजिस्टर है) को रीसेट कर रहा है। यह पिछले हाइलाइट को पुनर्स्थापित करता है:

command! -nargs=* -range S
\ let atslash=@/|exe ':'.<line1>.','.<line2>.'s'.<q-args>|let @/=atslash

हालाँकि, इसमें अभी भी कुछ समस्याएं हैं:
- संशोधित करने के बजाय :s, यह एक नई कमांड को परिभाषित करता है। हालांकि यह उपयोग करना संभव है cabbrevमैप करने के लिए :sकरने के लिए :S, मैं इस तरह के रूप में सभी निर्माणों को पकड़ने के लिए कोई रास्ता नहीं पता है :<range>s
- यदि आपने :nohlपहले सिर्फ एक खोज को छिपाने के लिए उपयोग किया था, तो यह पिछली खोज को फिर से उजागर करेगा। मुझे पता है कि अगर :nohlपहले बुलाया गया था तो खोजने का कोई तरीका नहीं है । (इसके आसपास जाना और :nohlकमांड को ओवरराइड करना भी संभव हो सकता है , लेकिन इसके लिए सभी सर्च कमांड को ओवरराइड करने की भी आवश्यकता होगी, जो बहुत अधिक हो सकती है ...)।

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