जवाबों:
क्विंसी का उत्तर ठीक है, लेकिन ऐसा करने का एक सटीक तरीका है जिसे बफर को संपादित करने की आवश्यकता नहीं है:
:%s/pattern//ng
यह एक संदेश को प्रिंट करेगा 3 matches on 2 lines
, और आपके बफर में कोई बदलाव नहीं किया जाएगा।
n
झंडा बनाता :substitute
आदेश बजाय मैचों की संख्या प्रिंट एक वास्तविक प्रतिस्थापन प्रदर्शन करने; g
झंडा प्रत्येक पंक्ति में कई मैचों की रिपोर्टिंग सक्षम बनाता है।
एक अन्य चीज जो आपके उपयोग के मामले में उपयोगी हो सकती है वह है पैटर्न से मेल खाने वाली सभी पंक्तियों को प्रिंट करना:
:global/pattern/print
जिसे छोटा किया जा सकता है:
:g/pattern
यह :global
कमांड के सबसे सरल उपयोगों में से एक है (जो कि दिमाग से शक्तिशाली है)। यह बस मेल खाने वाली सभी लाइनों का प्रिंट आउट ले लेगा pattern
, और फिर (यदि एक से अधिक लाइन है) तो आप इसे दबाने के Enter
लिए दूसरी कमांड दबाएं या इसे हटा दें।
थोड़ा सा सामान्य ज्ञान: यह आदेश नाम की उत्पत्ति है grep
, क्योंकि इसे आमतौर पर वर्णित किया जाएगा g/re/p
, जहां re
"नियमित अभिव्यक्ति" है।
g/re/p
वास्तव में से है ed
, नहीं vi
। Grep कुछ वर्षों से vi की भविष्यवाणी करता है।
nnoremap <leader>n :%s///gn<CR>
मैपिंग है। इसलिए मैं <leader>n
पहले खोजे गए पैटर्न की घटनाओं को गिनने के लिए दबाता हूं । मैं इसे आश्चर्यजनक रूप से अक्सर उपयोग करता हूं।
:%s/pattern//n
n
अंत में ध्वज बताता :s
आदेश मैचों की संख्या रिपोर्ट करने के लिए और वास्तव में स्थानापन्न नहीं। :h :s_flags
अधिक जानकारी के लिए पढ़ें ।
gn
?
g
हैं यदि आपको लगता है कि प्रति पंक्ति एक से अधिक मैच हो सकते हैं, जो अक्सर सच होता है। प्रश्न के उद्देश्य के लिए हालांकि ध्वज n
अधिक महत्वपूर्ण है।
पहले /
रेगेक्स की खोज करने के लिए उपयोग करें, फिर
:%s///gn
यह धुर्वा के उत्तर के समान है, सिवाय इसके कि यह।) उपयोग करने के लिए आसान है (क्योंकि आप अपने रेगेक्स के पहले मैच के परिणामों का पूर्वावलोकन कर सकते हैं) और बी।) सभी घटनाओं g
को गिनने के लिए ध्वज के साथ विश्व स्तर पर मेल खाता है।
इस पीआर के लिए धन्यवाद https://github.com/vim/vim/pull/4317 , प्रत्येक खोज कमांड vim 8.1.1270 में खोज आँकड़े (जैसे वर्तमान मैच स्थिति, और मैचों की संख्या) दिखाता है। S
चर से निकालना सुनिश्चित करें shortmess
।
:%s/pattern//g
आपको स्टेटस बार में सबस्टीट्यूशन की संख्या दिखाई देगी। ऐसा कई बार pattern
दिखाई देता है। फिर बस u
प्रतिस्थापन को पूर्ववत् करने के लिए दबाएँ ।
एक मैपिंग मैंने अपने .vimrc में यहां के उत्तरों के आधार पर जोड़ी:
" count nr of occurrences of word under cursor
nnoremap <leader>c :%s/<c-r><c-w>//gn<cr>
" count nr of occurrences of visual selection
vnoremap <leader>c :<c-u>%s/<c-r>*//gn<cr>
स्पष्टीकरण की एक बिट, उम्मीद है कि नए vimmers के लिए उपयोगी:
<c-r><c-w>
कमांड लाइन में कर्सर के नीचे शब्द सम्मिलित करता है, कई अवसरों में काम करता है।
<c-u>
दूर करने के लिए स्वचालित रूप से डाले जरूरत है '<,'>
जब दबाने :
दृश्य मोड में और कमांड लाइन के लिए जा रहा।
*
रजिस्टर, (अंतिम) दृश्य चयन होता है <c-r>*
की सामग्री को सम्मिलित करता है *
(यह भी डालने मोड में इस्तेमाल किया जा सकता) कमांड लाइन में रजिस्टर।
:h count-items