2009-04-03 22 views
87

में गिनती प्राप्त करें मैं एक स्ट्रिंग खोजना चाहता हूं और vi संपादक का उपयोग कर फ़ाइल में घटनाओं की संख्या को ढूंढना चाहता हूं।स्ट्रिंग के लिए खोजें और वीआई संपादक

+2

चयनित उत्तर (': g/xxxx/d') इस पृष्ठ पर दूसरों के लिए भयानक, खतरनाक और निम्न है। कृपया इसे अचयनित करें। –

+0

मैं सहमत हूं और यह आपको केवल 'लाइन हटा दी गई' नहीं बताती है 'घटनाएं हटाई नहीं' – user1709076

उत्तर

15
:g/xxxx/d 

यह पैटर्न के साथ सभी लाइनों को हटा देगा, और रिपोर्ट करेगा कि कितने हटाए गए हैं। उन्हें वापस पाने के लिए पूर्ववत करें। % S/पैटर्न // GN

+4

बेशक, वह सिर्फ "डी" को छोड़ सकते हैं, इसलिए उसे ऑपरेशन करने की आवश्यकता नहीं है। – Rook

+13

नोट यह केवल आपको बताता है कि कितने लाइनें - कितने अवसर नहीं। मुझे लगता है कि डार्क एक बेहतर समाधान है। –

+4

नीचे मेरा समाधान सही ढंग से कई अवसरों की गणना करता है एक रेखा और पूर्ववत करने के लिए कुछ भी नहीं है। –

37

:% s/string/string/g उत्तर देगा।

+0

क्या बेहतर जवाब है। +5 यदि संभव हो तो – ojblass

+0

मुझे लगता है कि यह केवल तब काम करेगा जब पैटर्न –

+9

में कोई '। *' उपयोग नहीं किया जाता है स्ट्रिंग को दोहराने की कोई आवश्यकता नहीं है, बस '% s/string // ng' करें। – slm

119

आपको n ध्वज की आवश्यकता है। गिनती करने के लिए शब्दों का प्रयोग:

:%s/\i\+/&/gn 

और किसी विशेष शब्द:

:%s/the/&/gn   

देखें count-items प्रलेखन अनुभाग।

आप बस में टाइप:

%s/pattern/pattern/g 

तो स्थिति लाइन आप vi में मैचों की संख्या भी मिल जाएगी।

+0

ऐसा लगता है कि यह उत्तर विम उपयोगकर्ताओं के लिए है और वीआई के लिए नहीं है :( – kadeshpa

+0

क्या आपके पास केवल आपके सिस्टम पर vi है? कौन सा संस्करण? – dirkgently

+0

किसी ने आपके quesiton को vim में टैग किया है ... मैंने इसे हटा दिया। – ojblass

137

रास्ता

है बहुत लंबा है और आप इसे फिर से टाइप करना पसंद नहीं करते हैं।

+6

एल के लिए +1 निबंध टाइपिंग और बिंदु पर। – Leafy

+0

यह सबसे अधिक प्रामाणिक उत्तर है जिसका उपयोग बिना किसी मारने वाली चाल से किया जाता है। – user1412066

2

उपयोग

:% s/पैटर्न/\ 0/जी

जब पैटर्न स्ट्रिंग

17

(गुस्तावो रूप में इसी तरह कहा है, लेकिन इसके साथ ही:)

किसी भी पहले खोज के लिए, आप बस कर सकते हैं:

:%s///gn 

एक पैटर्न की जरूरत नहीं है, क्योंकि यह खोज में पहले से ही है -register (@/)।

"%" - पूरी फ़ाइल
"जी" में s/ करते हैं - वैश्विक खोज (एक पंक्ति में कई हिट के साथ)
"n" - रोकता s/ के किसी भी प्रतिस्थापन - कुछ भी नहीं हटा दी जाती है! कुछ भी पूर्ववत नहीं किया जाना चाहिए!
(देखें: अधिक जानकारियां के लिए :help s_flag)

(इस तरह, इसके साथ "नेत्रहीन चयनित पाठ के लिए खोज" पूरी तरह से काम करता है, vim-wikia tip171 में वर्णित है)

0

मैं कर सुझाव देते हैं:

  1. कर्सर के नीचे क्या है, या मानक /pattern खोज के लिए "बाध्य खोज" करने के लिए * के साथ या तो खोजें।
  2. घटनाओं की संख्या प्राप्त करने के लिए :%s///gn का उपयोग करें।या आप घटनाओं के साथ लाइनों की संख्या प्राप्त करने के लिए :%s///n का उपयोग कर सकते हैं।

** मैं वास्तव में "एन पर एन के मैच एन 1 लाइनों" का संदेश सेवा दे रही हैं हर खोज के साथ है, लेकिन अफसोस के साथ मैं एक प्लग में है कि मिल सकता है।

नोट: आउटपुट की मुश्किल शब्द से भ्रमित न हों। पूर्व कमांड आपको 4 matches on 3 lines जैसा कुछ दे सकता है जहां उत्तरार्द्ध आपको 3 matches on 3 lines दे सकता है। जबकि तकनीकी रूप से सटीक है, बाद वाला भ्रामक है और '3 लाइन मिलान' कहना चाहिए। इसलिए, जैसा कि आप देख सकते हैं, वास्तव में बाद वाले ('एन' केवल) फॉर्म का उपयोग करने की आवश्यकता नहीं है। 'Gn' फ़ॉर्म का उपयोग कर आपको एक ही जानकारी, अधिक स्पष्ट रूप से और अधिक मिलती है।

संबंधित मुद्दे