चयनित शब्द की सभी घटनाओं को हाइलाइट करें?


159

मैं जीवीएम में नोटपैड ++ की तरह चयनित शब्द की सभी घटनाओं को कैसे उजागर कर सकता हूं?

जवाबों:


202

सामान्य मोड में:

:set hlsearch

फिर /नॉर्मल मोड में कमांड के साथ एक पैटर्न की खोज करें, या <Ctrl>oफिर /इन्सर्ट मोड में। *सामान्य मोड में कर्सर के नीचे शब्द की अगली घटना के लिए खोज करेंगे। hlsearchविकल्प उन सभी को अगर सेट पर प्रकाश डाला जाएगा।#शब्द की पिछली घटना की खोज करेंगे।

पिछली खोज के हाइलाइट को हटाने के लिए:

:nohlsearch

आप :nohlsearch<CR>कुछ सुविधाजनक कुंजी को मैप करना चाह सकते हैं ।


34
यदि आप hlsearchबहुत से टॉगल करने की योजना बनाते हैं तो आप :set hlsearch!इसके बजाय नक्शा करना चाह सकते हैं :set nohlsearch। यह सेटिंग को हमेशा बंद रखने के बजाय टॉगल करता है।
डेविड विंसलो

1
इसके अलावा, ध्यान रखें कि कर्सर शब्द के पिछले (#) या अगले (*) स्थान पर जाएगा
जुआन कैंपा

1
लेकिन आप स्थान है जहाँ आप दबाया वापस जा सकते हैं *या #द्वारा <Ctrl>oसामान्य मोड में।
रुस्लान

8
इसके बजाय :nohlsearch, आप बस उपयोग कर सकते हैं:noh
कुरकुरा

इसमें सेट करें .vimrc: noremap <F4> :set hlsearch! hlsearch?<CR>हाइलाइट के बीच टॉगल करने और हाइलाइट को हटाने के लिए <F4>
चैल

124

*कुंजी शब्द है कि कर्सर के तहत की सभी घटनाओं पर प्रकाश डाला जाएगा।


31
अगर &hlsearchहै तो ही ।
विल्हेमटेल

10
यह कर्सर के नीचे शब्द की अगली घटना के लिए भी कूद जाएगा। यदि आप पिछली घटना पर कूदना चाहते हैं, तो उपयोग करें #
विनीसियस पिंटो

7
क्या मैं इसे केवल वर्तमान स्थिति पर बना रह सकता हूं?
nn0p

@ nn0p हां आप कर सकते हैं - उस स्थिति में स्वीकृत उत्तर stackoverflow.com/a/3431203/363688 का अनुसरण करें । यह सिर्फ एक वैकल्पिक क्रिया है जो सभी घटनाओं को भी उजागर करेगा।
स्लीपिनैट

1
क्या इस कार्यक्षमता का उपयोग करने का एक तरीका है लेकिन हाइलाइट किए गए एक या अधिक शब्दों के साथ?
चो

22

मुझे पता है कि यह वास्तव में एक पुराना सवाल है, लेकिन अगर कोई इस सुविधा में रुचि रखता है, तो इस कोड की जांच कर सकता है http://vim.wikia.com/wiki/Auto_highlight_current_word_when_idle

" Highlight all instances of word under cursor, when idle.
" Useful when studying strange source code.
" Type z/ to toggle highlighting on/off.
nnoremap z/ :if AutoHighlightToggle()<Bar>set hls<Bar>endif<CR>
function! AutoHighlightToggle()
   let @/ = ''
   if exists('#auto_highlight')
     au! auto_highlight
     augroup! auto_highlight
     setl updatetime=4000
     echo 'Highlight current word: off'
     return 0
  else
    augroup auto_highlight
    au!
    au CursorHold * let @/ = '\V\<'.escape(expand('<cword>'), '\').'\>'
    augroup end
    setl updatetime=500
    echo 'Highlight current word: ON'
  return 1
 endif
endfunction

1
क्या इस लिपि को संशोधित करना संभव है जैसे कि कर्सर के नीचे का पाठ जो शुरू में हाइलाइट किया जाता है जब z / दबाया जाता है तब भी हाइलाइट किया जाता है जब कर्सर को अन्य शब्दों में ले जाया जाता है? प्रारंभिक शब्द की तलाश में स्रोत कोड के माध्यम से स्क्रॉल करते समय यह उपयोगी होगा।
स्टेंसटुला

18

सबसे सरल तरीका, सामान्य मोड में टाइप करें *

सक्षम और अक्षम करने के लिए मेरे पास ये मैपिंग भी हैं

"highligh search enabled by default
set hlsearch
"now you can toggle it
nnoremap <S-F11> <ESC>:set hls! hls?<cr>
inoremap <S-F11> <C-o>:set hls! hls?<cr>
vnoremap <S-F11> <ESC>:set hls! hls?<cr> <bar> gv

उस पर क्लिक करके शब्द का चयन करें

set mouse=a     "Enables mouse click
nnoremap <silent> <2-LeftMouse> :let @/='\V\<'.escape(expand('<cword>'), '\').'\>'<cr>:set hls<cr>

बोनस: CountWordFunction

fun! CountWordFunction()
    try
        let l:win_view = winsaveview()
        let l:old_query = getreg('/')
        let var = expand("<cword>")
        exec "%s/" . var . "//gn"
    finally
        call winrestview(l:win_view)
        call setreg('/', l:old_query)
    endtry
endfun
" Bellow we set a command "CountWord" and a mapping to count word
" change as you like it
command! -nargs=0 CountWord :call CountWordFunction()
nnoremap <f3> :CountWord<CR>

माउस के साथ शब्द का चयन करना और एक ही बार में घटित घटनाएँ: ओबीएस: ध्यान दें कि इस संस्करण में हमारे पास अंत में "काउंटवर्ड" कमांड है।

nnoremap <silent> <2-LeftMouse> :let @/='\V\<'.escape(expand('<cword>'), '\').'\>'<cr>:set hls<cr>:CountWord<cr>

अब मैं उपयोग करता हूं nnoremap * *``cgnऔरnnoremap # #``cgN
SergioAraujo

इसलिए मैं टाइप करने के बाद *, मैं हाइलाइटिंग को कैसे बंद करूं?
user5359531

यह दस्तावेज़ में वर्तमान शब्द को हाइलाइट करने के लिए है
Chalist

@ user5359531 :nohया:nohlsearch
dylnmc

@ user5359531 के बारे में nnoremap <silent> * :execute "normal! *N"<cr>और क्या nnoremap <silent> # :execute "normal! #n"<cr>? ये सिर्फ कर्सर के नीचे शब्द को उजागर करते हैं लेकिन इसे अगली घटना के लिए स्थानांतरित नहीं करते हैं।
dylnmc

10

खोज आधारित समाधान ( *, /...) कर्सर ले जाएँ, जो दुर्भाग्यपूर्ण हो सकता है।

एक वैकल्पिक वर्धित मार्क.वीम प्लगइन का उपयोग करना है , फिर अपने .vimrcडबल-क्लिक ट्रिगर हाइलाइटिंग को पूरा करने के लिए पूरा करें (मुझे नहीं पता कि कीबोर्ड चयन कैसे कमांड को ट्रिगर कर सकता है):

"Use Mark plugin to highlight selected word  
map <2-leftmouse> \m   

यह कई हाइलाइटिंग, दृढ़ता आदि की अनुमति देता है।

हाइलाइटिंग को हटाने के लिए, या तो:

  • फिर से डबल क्लिक करें
  • :Mark (अगले चयन तक स्विच ऑफ)
  • :MarkClear

2
खोज आधारित समाधान केवल कर्सर को स्थानांतरित करते हैं यदि incrememntal खोज चालू है। आप इसे इस तरह से बंद कर सकते हैं :set noincsearch:। मेरी राय में यह विम में सबसे अधिक कष्टप्रद सुविधाओं में से एक है और पहली चीजों में से एक है जिसे मैं ताजा इंस्टॉल के लिए अक्षम करता हूं।
३० पर जहरॉय

3
मुझे लगता है कि *बिना शर्त कर्सर ले जाएगा। और मैं यह नहीं देख incsearchसकता कि कैसे कष्टप्रद हो सकता है, क्योंकि यह केवल एक 'आगे देखो' है, वास्तव में आपकी स्थिति को बदले बिना वर्तमान खोज कर रहा है।
येवस्सेरी

3
वाह ... आप सही कह रहे हैं। मैंने मान लिया था incsearchकि आंदोलन को रोक दिया जाएगा, लेकिन एक त्वरित परीक्षण आपको सही होने की पुष्टि करता है। मैं क्षमाप्रार्थी हूं। हालाँकि, यह एक मानचित्रण बनाने के लिए सुपर आसान है जो आंदोलन को रोकता है :nnoremap * *N:। मुझे विश्वास नहीं हो रहा है कि आपको यह कष्टप्रद नहीं लगता कि आपका कर्सर स्क्रीन पर पूरी तरह से कूद जाता है जैसे आप खोज करते हैं। लेकिन ... ये बातें पूरी तरह से व्यक्तिपरक हैं। Vive la différence; ;-)
jahroy

3
आप यह भी कर सकते हैं :let @/='hilight_this', कि आपने hlsearchसक्षम किया है। यह बिना कूद के पाठ को हाइलाइट करता है, और आपको मौजूदा सेटिंग्स को बदलने की आवश्यकता नहीं है। यह उस मूल्य को बदलता है जो वर्तमान में खोज रजिस्टर में संग्रहीत है।
बेन डेविस

1
यह स्वीकृत उत्तर होना चाहिए। <लीडर> एम काम करता है, डबल क्लिक मैपिंग की कोई आवश्यकता नहीं है।
सासन

4

पहला (या आपके .vimrc में):

:set hlsearch

फिर अपने कर्सर को उस शब्द के ऊपर रखें, जिसे आप हाइलाइट करते हैं, और हिट चाहते हैं *

hlsearchका अर्थ है वर्तमान खोज की सभी घटनाओं को उजागर करना और *कर्सर के नीचे शब्द की खोज करना।


3

पहले यह सुनिश्चित करें कि निम्नलिखित कमांड जारी करके hlsearch सक्षम है

:set hlsearch

आप इसे अपने .vimrc फ़ाइल में सेट के रूप में भी जोड़ सकते हैं

set hlsearch

अब जब आप कमांड मोड या एक नियमित खोज कमांड में त्वरित खोज तंत्र का उपयोग करते हैं, तो सभी परिणामों पर प्रकाश डाला जाएगा। परिणामों के बीच आगे बढ़ने के लिए, 'n' को पीछे की ओर ले जाने के लिए 'N' दबाएँ।

सामान्य मोड में, कर्सर के नीचे शब्द के लिए एक त्वरित खोज करने के लिए और एक कमांड प्रेस '*' में अगली घटना के लिए कूदने के लिए, आप कर्सर के नीचे शब्द भी खोज सकते हैं और '#' दबाकर पिछली घटना पर जा सकते हैं। '

सामान्य मोड में, त्वरित खोज को भी इसके साथ लागू किया जा सकता है

/searchterm<Enter>

ocuurences के उपयोग पर हाइलाइट्स को हटाने के लिए, मैंने इसे अपने .vimrc में शॉर्टकट के लिए बाध्य किया है

:nohl



2

चलती कर्सर के बिना शब्द को उजागर करने के लिए, प्लॉप

" highlight reg. ex. in @/ register
set hlsearch
" remap `*`/`#` to search forwards/backwards (resp.)
" w/o moving cursor
nnoremap <silent> * :execute "normal! *N"<cr>
nnoremap <silent> # :execute "normal! #n"<cr>

अपने vimrc में।

इसके बारे में क्या अच्छा है g*और g#अभी भी "सामान्य" *और की तरह काम करेगा #


सेट hlsearchकरने के लिए, आप "शॉर्ट-फॉर्म" का उपयोग कर सकते हैं (जब तक कि आपके पास कोई अन्य फ़ंक्शन नहीं है जो कमांड मोड में "नोह" से शुरू होता है) :noh:। या आप लंबे संस्करण का उपयोग कर सकते हैं::nohlsearch

चरम सुविधा के लिए (मैं खुद को भीख माँगता हूँ hlsearch प्रति दिन 20 बार ), आप कुछ इस hlsearchतरह से टॉगल करने के लिए मैप कर सकते हैं :

" search highlight toggle
nnoremap <silent> <leader>st :set hlsearch!<cr>

।:। यदि आपका <leader>है \(यह डिफ़ॉल्ट रूप से है), तो आप भी दबा सकते हैं\st (जल्दी) में सामान्य टॉगल करने के लिए मोड hlsearch

या शायद आप सिर्फ :nohमैप करना चाहते हैं :

" search clear
nnoremap <silent> <leader>sc :nohlsearch<cr>

उपरोक्त बस :nohlsearchइतना चलता है (इसके विपरीत :set hlsearch!) यह तब भी शब्द को उजागर करेगा जब आप अगली बार दबाएंगे* या सामान्य मोड #में ।

चियर्स



1

उपयोग autocmd CursorMoved * exe printf('match IncSearch /\V\<%s\>/', escape(expand('<cword>'), '/\'))

सुनिश्चित करें कि आपने IncSearchकुछ करने के लिए निर्धारित किया है। उदा call s:Attr('IncSearch', 'reverse')। वैकल्पिक रूप से आप इसके स्थान पर किसी अन्य हाइलाइट समूह का उपयोग कर सकते हैं।

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


0

सिर्फ क्यों नहीं: z /

यह कर्सर और किसी अन्य घटना के तहत वर्तमान शब्द को उजागर करेगा। और आपको प्रत्येक आइटम के लिए एक अलग कमांड देने की ज़रूरत नहीं है जिसे आप खोज रहे हैं। शायद यह अपवित्र gvim में उपलब्ध नहीं है? यह डिफ़ॉल्ट रूप से व्यर्थ है।

* यदि आप कर्सर को अगली घटना के लिए स्थानांतरित करना चाहते हैं तो केवल अच्छा है। जब आप दो चीजों की तुलना करते हैं, तो आप अक्सर कर्सर को स्थानांतरित नहीं करना चाहते हैं, और हर बार * कुंजी को मारना कष्टप्रद होता है।


विम और gvim में समान रूप से एक ही कमांड सेट होता है। "Z /" कमांड में डॉक्स में कोई संदर्भ नहीं है।
WDS

यह न केवल जिम में, बल्कि विम में भी उपलब्ध है। बस यह जाँच की - स्पष्ट रूप से काम नहीं करता है।
रुस्लान

z / काम करता है जब इस स्क्रिप्ट का उल्लेख पहले उत्तर में है।
fzzylogic

0
  1. अपनी ~/.vimrcफ़ाइल में उन पंक्तियों को जोड़ें

" highlight the searched items set hlsearch " F8 search for word under the cursor recursively , :copen , to close -> :ccl nnoremap <F8> :grep! "\<<cword>\>" . -r<CR>:copen 33<CR>

  1. के साथ सेटिंग्स पुनः लोड करें :so%
  2. सामान्य मॉडल में शब्द के ऊपर जाते हैं।

  3. शब्द पर अपनी पूरी परियोजना को पुनरावर्ती रूप से खोजने के लिए * F8 दबाएं


0

उदाहरण के लिए यह प्लगइन्स:

बस vimawesome.com में कर्सर के नीचे खोजें

कुंजी, के रूप में clagccs उल्लेख किया है, कि प्रकाश डाला करता है अपनी खोज के साथ संघर्ष नहीं : https://vim.fandom.com/wiki/Auto_highlight_current_word_when_idle

स्क्रीन-शॉट यह खोज के साथ संघर्ष नहीं करता है: यहां छवि विवरण दर्ज करें नोट्स:

  • vim-illuminate हाइलाइट्स डिफ़ॉल्ट रूप से, मेरे स्क्रीन-शॉट में मैंने अंडरलाइन किया
  • vim-illuminate हाइलाइट्स / अंडरलाइन्स शब्द अंडरस्टैंडिंग by कर्सर, मेरे स्क्रीन-शॉट में मैंने इसे अनसेट किया
  • मेरे colorchemes बहुत ग्रे-ईश हैं। इसे भी कस्टमाइज़ करने के लिए अपनी जाँच करें।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.