2011-01-12 11 views
39

में मिलान की संख्या दिखाएं जब आप कोई खोज करते हैं तो Google क्रोम में एक अच्छी सुविधा है। यह आपको बताता है कि आप जिस कीवर्ड को खोज रहे हैं उसके लिए मैचों की संख्या है। हालांकि, विम में मुझे ऐसी सुविधा नहीं दिखाई देती है। कुछ लोगों को %s/pattern//gn या इसी तरह का उपयोग कर सुझाव:विम

http://vim.wikia.com/wiki/Count_number_of_matches_of_a_pattern
Unable to count the number of matches in Vim

लेकिन वह वास्तव में काफी लंबा है !! जब मैं '*', '%' दबाता हूं, या '/' और '?' का उपयोग करके कोई खोज करता हूं तो मैं गिनती की तलाश में हूं।

कोई विचार?

:nmap ,c :%s///gn 

फिर आप एक ऐसा करने में सक्षम होना चाहिए:

+0

आप इसे [superuser.com] (http://superuser.com) में पूछने पर विचार कर सकते हैं। मैं बंद करने के लिए वोट नहीं दूंगा, भले ही यह ऑफ-विषय है, सिर्फ इसलिए कि यह * vim * उपयोगकर्ताओं को ढूंढने के लिए एक उपयुक्त मंच हो सकता है। –

+7

(और एसयू एक अच्छा फोरम नहीं होगा क्योंकि उत्तर को स्क्रिप्टिंग की आवश्यकता है, और कृपया उन्नत उत्तरों प्रदान करने वाले लोगों को तितर-बितर करना बंद करें!) –

+4

मैं पूरी तरह से ल्यूक से सहमत हूं: स्टैक ओवरफ्लो फक में (http://stackoverflow.com/faq), यह कहता है कि "यदि आपका प्रश्न आम तौर पर कवर करता है ... आमतौर पर प्रोग्रामर द्वारा उपयोग किए जाने वाले सॉफ़्टवेयर टूल ... तो आप अपने प्रश्न पूछने के लिए सही जगह पर हैं!"। इसलिए, यह निश्चित रूप से ऑफ-विषय नहीं है। – DrAl

उत्तर

24

प्लगइन index search

नवीनतम संस्करण here

+0

यह सबसे अच्छा जवाब प्रतीत होता है। मैं इसे आज़माउंगा और देख सकता हूं कि यह आपके उत्तर को स्वीकृत उत्तर के रूप में चिह्नित करने के लिए अच्छा काम करता है या नहीं। – Rafid

+1

बहुत दिलचस्प लग रहा है। बस सावधान रहें कि इससे अन्य प्लगइन्स काम करना बंद नहीं कर पाएंगे क्योंकि यह कुछ काफी मौलिक कुंजी को फिर से परिभाषित कर रहा है। – DrAl

+0

आह, इसे इंगित करने के लिए धन्यवाद। – Rafid

18

मैं इसे करने का एक सीधा रास्ता के बारे में पता नहीं है, लेकिन आप जिस तरह का उपयोग कर सकता :%s/// डिफ़ॉल्ट पैटर्न के रूप में पिछले खोज का उपयोग करता है खोजें और फिर मैचों की संख्या की रिपोर्ट करने के लिए ,c दबाएं।

केवल मुद्दा होगा कि * और # उपेक्षा 'smartcase', तो परिणाम * उपयोग करने के बाद से कुछ से हो सकता है। आप * करके /ऊपर और फिर ,c दर्ज करके इसे गोल कर सकते हैं।

+2

आप इसे 'स्मार्टकेस' केस को उचित तरीके से संभालने के लिए ऐसा कर सकते हैं: 'nnoremap, c:% s/ = और अनदेखा? '\ c': '\ C' /// gn ' –

2

वैकल्पिक रूप से क्या @Al पता चलता है आप पंक्ति में सबसे अधिक लिख सकते हैं और तब स्थिति जहां वास्तविक पैटर्न डाला जाता है के लिए कर्सर ले जाने के कुंजी संयोजन मैप कर सकते हैं से:

: nmap, ग^[: % s /// GN^[आयुध डिपो^[आयुध डिपो^[आयुध डिपो^[आयुध डिपो

कहाँ '^ [' Ctrl + V, Esc और '^ [आयुध डिपो' Ctrl है + वी, बाएं

फिर ', सी' दबाकर कमांड मोड में जायेगा, पैटर्न दर्ज करें और कर्सर को दूसरे '/' पर छोड़ दें, जो पैटर्न को सम्मिलित करने के लिए तैयार है।

12

एक @ अल के जवाब के अलावा: आप vim statusline में स्वचालित रूप से यह दिखाने बनाना चाहते हैं तो, vimrc के लिए निम्न जोड़ने का प्रयास करें:

let s:prevcountcache=[[], 0] 
function! ShowCount() 
    let key=[@/, b:changedtick] 
    if s:prevcountcache[0]==#key 
     return s:prevcountcache[1] 
    endif 
    let s:prevcountcache[0]=key 
    let s:prevcountcache[1]=0 
    let pos=getpos('.') 
    try 
     redir => subscount 
     silent %s///gne 
     redir END 
     let result=matchstr(subscount, '\d\+') 
     let s:prevcountcache[1]=result 
     return result 
    finally 
     call setpos('.', pos) 
    endtry 
endfunction 
set ruler 
let &statusline='%{ShowCount()} %<%f %h%m%r%=%-14.(%l,%c%V%) %P' 
+0

+1: यह अच्छा लगता है! – DrAl

+0

क्या मैं उस संस्करण का अनुरोध कर सकता हूं जिसमें अनदेखा शामिल है? : पी –

3

आपके पास पहले से ही उत्तर की अच्छी धन है, लेकिन मुझे लगता है कि अभी भी एक समस्या है इस समस्या के लिए और अधिक दृष्टिकोण।

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

फंक्शन:

" Count number of occurances of a word 
function Count(word) 
    let count_word = "%s/" . a:word . "//gn" 
    execute count_word 
endfunction 

और मानचित्रण:

" Count current word 
nmap <Leader>w <Esc>:call Count(expand("<cword>"))<CR> 
7

यहाँ एक सस्ता समाधान है ... मुझे लगता है इस्तेमाल किया और विम के सभी बदलें। कोई फैंसी स्क्रिप्टिंग नहीं। मैंने एक एक्स एक्स किया और एक्स के साथ सभी को बदलें। अंत में, विम ने "98 9 2 लाइनों पर 2134 प्रतिस्थापन" की रिपोर्ट की। एक्स 2134 बार दिखाई दिया। उपयोग करें: क्यू! इसे सहेजने के बिना फ़ाइल छोड़ने के लिए। कोई नुकसान नहीं किया।

0
:vim[grep][!] /{pattern}/[g][j] {file} ... 

विमग्रेप विम के अंतर्निर्मित रेगेक्स सर्च इंजन का उपयोग करता है, ताकि आप विम के मानक खोज कमांड से पैटर्न का पुन: उपयोग कर सकें। तो, मैं पहले खोज पद्धति का उपयोग कर सामान्य तरीके का परीक्षण:/{पैटर्न}/

तो यह डालें:

:vim /CTRL+r//g % 

जहां CTRL+r/ पहले स्लैश के बाद पिछले खोज पैटर्न डाल देंगे। स्थिति रेखा प्रदर्शित होगी (अधिकतम में से 1), जहां {pattern} के लिए अधिकतम अधिकतम मिलान है। इसके बाद पहले और अंतिम मैचों के लिए अगले & पिछले मैचों और :cfirst और :clast की खोज के लिए :cnext और :cprev का उपयोग करें। इन 4 आदेशों को उन्हें निष्पादित करने के लिए तेज़ी से बनाने के लिए रीमेप किया जा सकता है।

0

यह प्लगइन बस यही करता है। https://github.com/osyo-manga/vim-anzu

विम में एक शब्द की खोज करते समय, यह स्थिति रेखा पर शब्द गणना प्रदर्शित करेगा। इसमें खोज शब्द के आगे प्रदर्शित करने का विकल्प भी है। this_is_my_sample_word (3/12), या this_is_my_sample_word (7/12)। यह मूल रूप से कहता है: यह 12 कुल घटनाओं में से तीसरी या 7 वीं घटना है।