मैं खोज करने के बाद स्वचालित रूप से "hlsearch" कैसे बंद कर सकता हूँ?


19

मुझे "hlsearch" सेटिंग पसंद है, लेकिन जब मैंने खोज पूरी कर ली, तो मुझे यह अप्रिय लगा। खासकर अगर मैं किसी ऐसी चीज की खोज करूं जिसमें बहुत सारे मैच हों। मुझे पता है कि मैं इसे बंद कर सकता हूं

:set nohlsearch

लेकिन यह पूरे 16 कीस्ट्रोक्स लेता है, और इससे भी अधिक गुस्सा, मुझे अपनी अगली खोज के लिए इसे वापस चालू करना होगा

:set hlsearch    

क्या कोई ऐसा तरीका है जिससे मैं खोज शुरू करने पर स्वचालित रूप से टॉगल कर सकता हूं, और जब मैं खोज कर रहा हूं, तब बंद हो सकता है? उदाहरण के लिए, यदि मैं इन्सर्ट मोड दर्ज करता हूं, या टेक्स्ट को संशोधित करता हूं, तो क्या बिना किसी अतिरिक्त कीस्ट्रोक्स के hlsearch को बंद कर दिया गया है?


3
स्वचालित रूप से परिभाषित करें।
एंटनी

@ एंटनी के रूप में, अगर मैं संपादन कर रहा हूँ, या सम्मिलित मोड में, यह मेरे बिना किसी भी बटन को दबाने की आवश्यकता के बिना बंद हो जाएगा। अगर मैं /या के साथ खोज शुरू करता हूं ?, या अगर मैं दबाता हूं nया N, यह बिना किसी और बटन को दबाने की आवश्यकता के बिना चालू हो जाएगा।
DJMcMayhem

1
ओह और परिभाषित "किया" खोज
क्रिश्चियन Brabandt

1
:nno <BS> :set hls!\|set hls?<CR>- एक लाइन, एक की-वर्ड, स्टेट फीडबैक, और जब आप हाइलाइटिंग चाहते हैं या नहीं कर सकते हैं, तो दूसरे अनुमान लगाने की कोशिश नहीं करते हैं। कभी-कभी मैं संपादन करते समय स्क्रीन पर बाईं ओर हाइलाइट करना चाहता हूं। कभी-कभी मैं /एक ऑपरेटर के साथ एक प्रस्ताव के रूप में उपयोग नहीं करता।
एंटनी

nnoremap <M-\> :set hlsearch!<CR><Bar>:echo 'hlsearch: ' . ['Off', 'On'][&hlsearch]<CR>
सातो में सतो कत्सुरा

जवाबों:


26

बहुत अधिक सुविधाजनक तरीका है। उपयोग करने के बजाय

:set nohlsearch

जो वास्तव में hlsearch सेटिंग को बंद कर देता है, उपयोग करें

:nohls

जब तक आप फिर से खोज नहीं करेंगे, यह केवल hlsearch को बंद कर देगा। से:help nohls

                 *'hlsearch'* *'hls'* *'nohlsearch'* *'nohls'*
'hlsearch' 'hls'    boolean (default off)
            global
            {not in Vi}
            {not available when compiled without the
            |+extra_search| feature}

    ...

    When you get bored looking at the highlighted matches, you can turn it
    off with |:nohlsearch|.  This does **not change the option value**, as
    soon as you use a search command, the highlighting comes back.

हालाँकि, यह समाधान सही नहीं है, क्योंकि आपको अभी भी टाइप करना है :nohlsजो हर खोज के बाद करने के लिए दर्द होता है। आप इसे मैपिंग के साथ प्राप्त कर सकते हैं, जैसे

nnoremap <esc><esc> :silent! nohls<cr>

लेकिन एक और भी बेहतर समाधान है! haya14busa / incsearch.vim । यह कम से कम मेरी राय में, एक आवश्यक विम प्लगइन है। मुख्य विशेषता यह है कि सभी खोज मैचों को वास्तविक समय में हाइलाइट किया जाता है, जैसा कि आप अपने रेगेक्स को टाइप कर रहे हैं। उदाहरण के लिए:

यहां छवि विवरण दर्ज करें

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

set hlsearch
let g:incsearch#auto_nohlsearch = 1
map n  <Plug>(incsearch-nohl-n)
map N  <Plug>(incsearch-nohl-N)
map *  <Plug>(incsearch-nohl-*)
map #  <Plug>(incsearch-nohl-#)
map g* <Plug>(incsearch-nohl-g*)
map g# <Plug>(incsearch-nohl-g#)

अपने को .vimrc

यदि आपके पास कोई अन्य nमैपिंग है, तो आपको इन्हें बंद करना होगा। उदाहरण के लिए, मेरे पास होता था

nnoremap n nzz
nnoremap N Nzz

ये दो मैपिंग प्रत्येक अभिभावक के साथ संगत नहीं हैं!


चूंकि आप एक स्व उत्तर दे रहे हैं, मैं आपको सुझाव देना चाहता हूं कि आप एक और समस्या भी जोड़ सकते हैं set hlsearch। यदि आपने इसे परिभाषित किया है vimrcतो :nohहर बार जब आप स्रोत को अधिलेखित करेंगे vimrc। इसे हल करने के लिए मेरे पास if !&hlsearch | set hlsearch | endifहै vimrc। (और यह एक और समस्या है जो प्लगइन हल करता है।)
grochmal

डन्नो, कोड का एक पूरा ढेर की तरह लगता है और मुझे बहुत फायदा नहीं हुआ। वास्तव में यह आपके वृद्धिशील खोज के लक्ष्य को कठिन बनाता है, जिससे यह त्वरित नेविगेशन के लिए कम उपयोगी होता है।
एंटनी

एक महान प्लगइन सवाल का जवाब देने और बहुत कुछ करने के लिए!
रिचवेल 16

7

vim-cool एक सरल प्लगइन है जो सिर्फ यही करता है।

जब आप खोज कर रहे हों तो विम-कूल डिसलाइवर सर्च हाइलाइटिंग करता है और जब आप फिर से सर्च करते हैं तो इसे री-इनेबल कर देते हैं।

यह काम करता है remapping बिना द्वारा उपयोग करते हुएCursorMoved और InsertEnterautocommands।


यह तकनीक (ऑटोकॉमैंड्स का उपयोग करना) मेरे जवाब से बेहतर है, और मुझे विश्वास नहीं हो रहा है कि जब मैंने अपना लिखा था, तो मैंने इसके बारे में सोचा नहीं था। वोट दें।
रिच

5

मैं <Leader><Enter>एक शॉर्टकट के रूप में उपयोग करता हूं :noh। (मेरा नेता है ,, इसलिए यह बहुत करीब है)

यह आपकी अगली खोज तक हाइलाइट को बंद कर देगा।


3

जैसा कि आप पहले से ही अपने जवाब में नोट कर चुके हैं , यह पूरी सुविधा को बंद करने के बजाय :nohlsearchकमांड के साथ हाइलाइटिंग (जिसे संक्षिप्त किया जा सकता है :noh) को बंद करने के लिए कहीं अधिक कुशल है और फिर अगली बार जब आप खोजते हैं तो इसे वापस चालू कर दें।

यदि आप iसम्मिलित मोड में प्रवेश करने के लिए हर बार हाइलाइटिंग बंद करना चाहते हैं , तो आप ऐसा करने के लिए एक साधारण मैपिंग बना सकते हैं:

:nnoremap i :noh<cr>i

यह पाठक के लिए अन्य आदेशों के लिए समान मैपिंग बनाने के लिए एक अभ्यास के रूप में छोड़ दिया जाता है, जहां वे स्विच ऑफ करना चाहते हैं।


2

यह बेवकूफ या भोला लग सकता है, लेकिन जब मैं हाइलाइटिंग को रोकना चाहता हूं तो मैं क्या करता हूं क्या मैं एक यादृच्छिक स्ट्रिंग की खोज कर रहा हूं जो (लगभग निश्चित रूप से) दस्तावेज़ में मौजूद नहीं है। कुछ इस तरह:

/skljdfhadhfs

दी, यह कुछ प्रमुख स्ट्रोक लेता है, लेकिन वे वास्तव में यादृच्छिक हैं, इसलिए उन्हें कुछ ही समय में टाइप किया जा सकता है।


1
लेकिन यह बनाता है nऔर Nअब काम नहीं करता है, और भी चीजों की तरह :%s//somethingया :g//something। यह भी अपने खोज इतिहास को clutters
DJMcMayhem

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

1

मैंने इसे रीमैप करने के लिए और अधिक सहज पाया Ctrl- Lदमन शामिल करने के लिए :nohls:

nnoremap <C-L> :nohls<cr><C-L>

Vi और विम में आपका स्वागत है ! एक पुराने प्रश्न के बारे में अपने ज्ञान को साझा करने के लिए धन्यवाद। उच्च गुणवत्ता वाले उत्तर, जैसा कि आपने देखा होगा, आम तौर पर कोड क्या कर रहा है, इसकी कुछ व्याख्या के साथ आते हैं (यह विशेष रूप से नए वाइमर के लिए सहायक है जो बिना अधिक ज्ञान के यहां उतर सकते हैं)। यह प्रासंगिक :helpवर्गों के लिए एक अच्छा विचार भी हो सकता है !
डी। बेन नोबल

0

मैं <Leader><Enter>एक शॉर्टकट के रूप में उपयोग करता हूं :hlsऔर अपने नेता को अंतरिक्ष के रूप में सेट करता हूं।

let mapleader = "\<Space>"
nmap <silent> <leader><Esc> :set hls!<cr>

खोज के बाद एक आइटम हाइलाइट किया जाएगा, इसे बंद करने के लिए, हिट करें <Space><Esc>। और अगर आप तय करते हैं कि आप खोज परिणामों को फिर से देखना चाहते हैं, तो हिट करें <Space><Esc>। इसका hls!मतलब यह है कि सेटिंग के लिए सेटिंग को टॉगल करें hls(शॉर्टहैंड फॉर hlsearchयानी सर्च रिजल्ट हाइलाइटिंग) (ताकि इसके !ठीक पहले सेटिंग टॉगल हो जाए )।


-1

इस मैक्रो को अपने .vimrc में जोड़ें

map #h :set hls!<CR>

यह आपको #h के साथ hilighting टॉगल करने की अनुमति देगा


यह जेम्स एफ्लेक के जवाब से अलग नहीं है।
जैमेसन

मेरा अधिक संक्षिप्त लगता है।
डारेल ली

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