जब मैं हिट करूंगा, तो मैं मैचों की सूची बनाना चाहूंगा:
/example
ताकि मैं देख सकूं कि सभी मैच एक साथ कहां हुए हैं।
जब मैं हिट करूंगा, तो मैं मैचों की सूची बनाना चाहूंगा:
/example
ताकि मैं देख सकूं कि सभी मैच एक साथ कहां हुए हैं।
जवाबों:
" put in your ~/.vimrc file
" START search related configs and helps
"
" ignore case when searching
set ignorecase
" search as characters are entered, as you type in more characters, the search is refined
set incsearch
" highlight matches, in normal mode try typing * or even g* when cursor on string
set hlsearch
" yank those cheat commands, in normal mode type q: than p to paste in the opened cmdline
" how-to search for a string recursively
" :grep! "\<doLogErrorMsg\>" . -r
"
" how-to search recursively , omit log and git files
" :vimgrep /srch/ `find . -type f \| grep -v .git \| grep -v .log`
" :vimgrep /srch/ `find . -type f -name '*.pm' -o -name '*.pl'`
"
" how-to search for the "srch" from the current dir recursively in the shell
" vim -c ':vimgrep /srch/ `find . -type f \| grep -v .git \| grep -v .log`'
"
" how-to highlight the after the search the searchable string
" in normmal mode press g* when the cursor is on a matched string
" how-to jump between the search matches - open the quick fix window by
" :copen 22
" how-to to close the quick fix window
" :ccl
" F5 will find the next occurrence after vimgrep
map <F5> :cp!<CR>
" F6 will find the previous occurrence after vimgrep
map <F6> :cn!<CR>
" F8 search for word under the cursor recursively , :copen , to close -> :ccl
nnoremap <F8> :grep! "\<<cword>\>" . -r<CR>:copen 33<CR>
" omit a dir from all searches to perform globally
set wildignore+=**/node_modules/**
" use perl regexes - src: http://andrewradev.com/2011/05/08/vim-regexes/
noremap / /\v
"
" STOP search related configs and helps
:g//p
इसके लंबे रूप में:
:global/regular-expression/print
आप पैटर्न / रेगेक्स छोड़ सकते हैं और विम पिछले खोज शब्द का फिर से उपयोग करेंगे।
सामान्य ज्ञान: ग्रेप उपकरण इस आदेश अनुक्रम के नाम पर रखा गया था।
:g//
- चूँकि p (rint) डिफ़ॉल्ट क्रिया है, आप इसे बाहर भी छोड़ सकते हैं।
:g/
और भी छोटा है!
--context 9
?
:%s/regular-expression//gn
यह इन पंक्तियों के साथ कुछ का उत्पादन करेगा:X matches on Y lines
आप यह भी कर सकते हैं:
g/pattern/#
यह आपके द्वारा वांछित पैटर्न और पंक्ति की संख्या को प्रिंट करेगा।
#
आवश्यक नहीं है। यह डिफ़ॉल्ट रूप से लाइन नंबर दिखाता है
यदि आप इस सूची को देखना चाहते हैं और मैचों के बीच जल्दी से कूदना चाहते हैं, तो उपयोग करने पर विचार करें
:vimgrep example %
या
:grep example %
यह सभी मैचों के साथ "त्रुटि सूची" को पॉप्युलेट करेगा, ताकि आप उपयोग कर सकें :copen
सूची में QuickFix बफर में उन सब को, प्रेस को बताया कि मैच, या की तरह उपयोग आदेशों के लिए कूद करने के लिए एक विशेष लाइन पर प्रवेश :cn
और :cp
आगे और पीछे जाने के लिए।
पूरी तरह से स्पष्टीकरण के लिए, एक समान प्रश्न के लिए मेरा उत्तर देखें
E499: Empty file name for '%' or '#', only works with ":p:h"
बस एक नया सीखा: एक Location List
! वर्तमान फ़ाइल में खोजने के लिए
टाइप :lvim foo %
करें foo
और स्थान सूचीfoo
में शामिल सभी मैचों को दर्ज करें । क्विकफ़िक्स विंडो में स्थान सूची खोलने के लिए
टाइप करें, जो हमेशा की तरह पूरी तरह से नेविगेट करने योग्य है। सूची के माध्यम से
उपयोग करें / ( सर्वोत्तम अनुभव के लिए tpope / unimpaired मैपिंग का उपयोग करें ):lopen
:lnext
:lprevious
एक और संभावना फ़ाइल खोज आदेशों को शामिल करने के लिए है।
[I
यह कर्सर के नीचे शब्द की सभी घटनाओं को सूचीबद्ध करेगा। यह आपकी आवश्यकता से अधिक हो सकता है, क्योंकि यह वर्तमान फ़ाइलों में शामिल किसी भी फ़ाइल को खोजेगा।
लेकिन इस कमांड के बारे में अच्छी बात यह है कि खोज परिणाम प्रदर्शन प्रत्येक मैच की लाइन संख्या के अलावा, मैचों की संख्या की संख्या को भी दर्शाता है।
:help include-search
बहुत सारे संस्करण देखने के लिए।
के बारे में एक नोट
:g//p
इसे और कम किया जा सकता है
:g//
क्योंकि, जैसा कि दूसरों ने कहा है, पी (रिंट) डिफ़ॉल्ट क्रिया है।
[I
संदर्भ से परिणाम प्राप्त करना संभव है , जैसे ग्रीप पर --context 9
?
आप quickfix
मैचों के साथ एक अच्छी खिड़की प्राप्त कर सकते हैं जो आपके वर्तमान खोज पैटर्न का निर्माण करता है
:vim // %
:copen
सुपर आसान अगर आपने पहले सिर्फ एक जटिल खोज पैटर्न का उपयोग किया है /pattern
संपादित करें : अभी पता चला है कि यह सभी खुले बफ़र्स के लिए भी काम करता है
:bufdo vimgrepadd // %
:copen
उपयोग करने :set hlsearch
से पीले रंग के सभी मैच हाइलाइट हो जाएंगे जिससे आप मैचों के लिए आसानी से फाइल स्कैन कर सकते हैं। यह वह नहीं हो सकता जो आप चाहते हैं, हालांकि, खोज के बाद: जी // पी आपको सूचीबद्ध मैच देगा
:nohl
हाइलाइट्स को खाली करने के लिए मैप करना भी उपयोगी है जब आपको उनकी आवश्यकता नहीं होती है।
मैंने इसके लिए एक कोड ऑफ कोड लिखा है। यह वास्तव में समस्याओं से बचा जाता है vimgrep
। यह अनाम फ़ाइलों के साथ भी काम करता है। और इसका उपयोग करना आसान है।
function! Matches(pat)
let buffer=bufnr("") "current buffer number
let b:lines=[]
execute ":%g/" . a:pat . "/let b:lines+=[{'bufnr':" . 'buffer' . ", 'lnum':" . "line('.')" . ", 'text': escape(getline('.'),'\"')}]"
call setloclist(0, [], ' ', {'items': b:lines})
lopen
endfunction
जब आप इसे एक पैटर्न के साथ कहते हैं, तो यह सभी मैचों के साथ लोकेशन विंडो खोलता है।
यह एक कमांड हो सकती है
command! -nargs=1 Mat call Matches(<f-args>)
तो आप सभी को टाइप करने की जरूरत है :Mat pattern
मैं वर्तमान दृश्य चयन के मैचों को प्राप्त करने के लिए निम्नलिखित मैपिंग का उपयोग करता हूं।
vnoremap Y "xy:call Matches(@x)<CR>
node_modules
? - - perl regexes विम के डिफ़ॉल्ट कार्यप्रणाली को कैसे बदलता है? - - निम्नलिखित यह है कि मैंने अपनी .ex फ़ाइलों की खोज को किस तरह से डिज़ाइन किया है Askubuntu.com/a/789769/25388 आपको यह सीखना अच्छा होगा कि इसे कैसे सुधारें । यह इतना सहज नहीं है इसलिए मैं खुद भी अक्सर तर्क भूल गया।