: Nohlsearch और: set nohlsearch के बीच कार्यात्मक अंतर क्या है?


13

मैंने देखा कि जब मैं उपयोग :nohlsearchकरता हूं कि यह वास्तव में वैसा नहीं करता है :set nohlsearch

विशेष रूप से, hlsearchसेटिंग को वास्तव में बंद नहीं किया जाता है (जो कि है :set hlsearch) पूरा करता है।

प्रदर्शित करने के लिए मेरा क्या मतलब है:

:set hlsearch
:nohlsearch
:echo &hlsearch

यह प्रिंट 1( अब भी सेट है! )

:set hlsearch
:set nohlsearch
:echo &hlsearch

यह प्रिंट करता है 0क्योंकि हमने सेटिंग को vim में स्विच करने के लिए मानक तरीके का उपयोग करके hlsearch को बंद कर दिया है।

इसलिए मैं आश्चर्यचकित हूं क्योंकि :nohlsearchपूर्व कमांड के अस्तित्व के लिए कुछ वास्तविक कारण होना चाहिए ।

इसका कारण यह है कि मुझे परवाह है कि मुझे अब अपनी विम स्क्रिप्टिंग में यह जांचने की आवश्यकता है कि क्या खोज हाइलाइट सक्रिय है, और चूंकि मैं :nohlsearchअपने अन्य स्क्रिप्टिंग में ": सेट नोहलसर्च" के बजाय उपयोग कर रहा था , इसलिए मेरा &hlsearchपरीक्षण हमेशा लौटता है 1। इसलिए मैं सोच रहा हूं कि अब nohlsearchपूर्व कमांड का उपयोग करके मैं क्या बदल रहा हूं ।

जवाबों:


15

से :h :nohlsearch

                                                        : नोह: नोहलसर्च
: noh [lsearch] 'hlsearch' विकल्प के लिए हाइलाइटिंग बंद करो। यह
                        खोज का उपयोग करते समय स्वचालित रूप से वापस आ जाता है
                        कमांड, या 'hlsearch' विकल्प सेट करें।
                        यह कमांड किसी ऑटोकॉमैंड में काम नहीं करता है, क्योंकि
                        हाइलाइटिंग स्थिति सहेजा और पुनर्स्थापित किया जाता है जब
                        आटोक्मैंड्स को स्वतः निष्पादित करना - searchpat।
                        उपयोगकर्ता फ़ंक्शन को लागू करते समय एक ही बात।

मुख्य बिंदु यह है कि जब आप एक नई खोज शुरू करते हैं तो यह स्वतः ही हाइलाइटिंग को बदल देता है। :set nohlsearchवास्तव में hlsearchबंद हो जाता है, जिसका मतलब है कि अगली बार जब आप कुछ खोजते हैं तो कोई हाइलाइटिंग नहीं होती है।

उदाहरण: मान लें hlsearchकि यदि आप वर्तमान में बफर में "हैलो" की खोज कर रहे हैं, तो सभी "हैलो" को हाइलाइट किया जाएगा। यदि आप उपयोग करते हैं तो :nohlsearchकुछ भी उजागर नहीं किया जाएगा। लेकिन अगर आप "दुनिया" की खोज करते हैं, तो सभी "दुनिया" पर प्रकाश डाला जाएगा। यदि आपने set nohlsearch"दुनिया" के बजाय उपयोग किया था , तो हाइलाइट नहीं किया जाएगा।


यह भी ध्यान दें कि यह कमांड मूल रूप से उपयोगकर्ता फ़ंक्शन के अंदर कुछ भी नहीं करता है। उदाहरण के लिए,

function! NoHlsearch()
    nohlsearch
endfunction

जब कोई दृश्य प्रभाव दिखाई देता है।


यह देखने के लिए कि क्या hlsearch वास्तव में सक्रिय है, आप चर की जाँच करना चाहते हैं v:hlsearch। जब v:hlsearch = 0हाइलाइटिंग बंद हो, और जब v:hlsearch = 1हाइलाइटिंग चालू हो। &hlsearch = 1जाँच से पहले आपको यह सुनिश्चित कर लेना चाहिए v:hlsearch

से :h v:hlsearch

                                        v: hlsearch hlsearch-variable
v: hlsearch चर जो यह निर्धारित करता है कि खोज हाइलाइटिंग चालू है या नहीं।
                केवल तभी समझ में आता है यदि 'hlsearch' सक्षम है जिसकी आवश्यकता है
                + Extra_search। इस चर को शून्य की तरह सेट करना
                : nohlsearch कमांड, इसे एक एक्ट की तरह सेट करता है
                        let & hlsearch = & hlsearch

क्या आप स्पष्ट कर सकते हैं कि किसी फ़ंक्शन के अंदर "मूल रूप से कुछ भी नहीं" से आपका क्या मतलब है? यह मानक कार्य करता है (यह अस्थायी रूप से खोज को उजागर करना बंद कर देता है जब तक कि अगली बार खोज न हो जाए)।
स्टीवन लू

मैं ध्वज को एक्सेस करने का एक तरीका खोजने की उम्मीद कर रहा हूं जो यह नियंत्रित करता है कि क्षणिक :nohlsearchप्रभाव है या नहीं ... मुझे लगता है कि इसके अभाव में मुझे :nohlsearchचर के साथ सभी कॉलों को ट्रैक करने का सहारा लेना पड़ता है ।
स्टीवन लू

@StevenLu संपादन देखें।
FDinoff

धन्यवाद। ऐसा लगता है कि कोड मैं "मूल रूप से कुछ नहीं कर रहा है" पहलू के आसपास हैक्स का उपयोग कर रहा है ऐसा करने से: nnoremap <silent> <expr> <boundkey> SearchHighlight()जहां SearchHighlight()एक स्ट्रिंग वापस आ सकती है ":silent nohlsearch\<CR>"v:hlsearchटिप के लिए भी धन्यवाद , बस मुझे जो चाहिए।
स्टीवन लू

1

क्या आपकी स्क्रिप्ट को हाइलाइटिंग की वर्तमान स्थिति के बारे में पता होना चाहिए?

hlsearchकेवल वर्तमान खोज को बंद करने के लिए, मैं Ctrl-lअपने .vimrc में इसका उपयोग करता हूं:

nnoremap <silent> <C-l> :<C-u>nohlsearch<CR><C-l>

उपरोक्त आदेश का उपयोग करते समय अगली खोज के साथ हाइलाइटिंग रिटर्न खोजें। Ctrl-lसुविधाजनक है क्योंकि यह सामान्य उपयोग है स्क्रीन को साफ़ करने और फिर से तैयार करने के लिए।

लगातार या उस खोज हाइलाइटिंग स्थिति को बदलने के लिए, मैं अपने टॉगल के रूप में F3 का उपयोग करता हूं:

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