विम में एक निश्चित पाठ पैटर्न के बीच की रेखाओं को मिलाएं


8

मेरे पास एक टेक्स्ट फ़ाइल है जो इस तरह दिखती है:

A.
text
text
text


A.
more text

more text

A.
more text

मैं "मार्कर" के बीच सभी लाइनों को जोड़ना चाहता हूं A.ताकि यह ऐसा दिखे:

A.texttexttext
A.more textmore text
A.more text

मैं विम में यह कैसे कर सकता हूं?

जवाबों:


4
:%s/\n\(\(A\.$\)\@!.*\)/\1/

एक पैटर्न से मेल खाते हैं:

  1. नई पंक्ति,
  2. का एक समूह

    1. नहीं स्ट्रिंग A.सीधे अंत के लाइन द्वारा पीछा किया, तो
    2. पंक्ति के अंत तक कोई भी चरित्र

साथ में:

  • शुरुआती न्यूलाइन (यानी ऊपर समूह) को छोड़कर सब कुछ मेल खाता है,

और यह विश्व स्तर पर करते हैं।


1
धन्यवाद। मुझे नहीं पता कि यह कैसे काम करता है, लेकिन ऐसा लगता है! मुझे इसे ध्यान से विच्छेद करना होगा। मैंने सभी लाइनों को मिलाकर एक काम भी पाया और फिर "ए" पर एक नई लाइन डाली।
vim noob

@vimnoob: :help \@!उस भाग की अधिक जानकारी के लिए विम में देखें । अन्यथा यह सीधे तौर पर आगे है, उम्मीद है, मेरे स्पष्टीकरण के साथ। आपके दृष्टिकोण के साथ एक समस्या यह है कि अगर " A." पाठ में होता है, हालांकि एक पृथक मार्कर लाइन के रूप में नहीं है, तो इसे विभाजित किया जाएगा जैसे कि यह मूल रूप से एक मार्कर था। व्यवहार में यह एक समस्या नहीं हो सकती है (मुझे नहीं पता कि आपकी "वास्तविक" फ़ाइल कैसी दिखती है), लेकिन आम तौर पर यह अवांछित व्यवहार का कारण बन सकता है अगर किसी को इसके बारे में जानकारी नहीं है।
डैनियल एंडरसन

@vimnoob: मैंने अपना उत्तर फिर से पढ़ा, और यदि आप :%s///वाक्य रचना से परिचित नहीं हैं : तो यह विम में एक "खोज और प्रतिस्थापित" सिंटैक्स है। :कमांड शुरू करता है, %पूरे बफर को सीमा के रूप में निर्दिष्ट करता है, sएक प्रतिस्थापन शुरू करता है। /पैटर्न सीमांकक है (किसी अन्य वर्ण का उपयोग किया जा सकता है, लेकिन /"मानक" है)। पहला /खोज पैटर्न शुरू करता है, दूसरा प्रतिस्थापित पैटर्न, और तीसरा इसे समाप्त करता है। केस इंसेंसिटिविटी को निर्दिष्ट करने के लिए ट्रेलिंग मोडिफ़ायर उपलब्ध हैं, आदि \1सर्च पैटर्न में हड़पने वाले समूह का प्रतिनिधित्व करता है। फ़ाइल के साथ :%s/foo/bar/बदलता है । foobar
डैनियल एंडरसन

आपकी सहायता के लिए धन्यवाद। मुझे बस इस \ @ पर शोध करने की आवश्यकता है! भाग के रूप में मैं बुनियादी खोज की जगह और मूल regexp से परिचित हूं।
vim noob

1
@ रमन: सबसे सीधा-सीधा तरीका मुझे लगता है कि इसके बाद का ग्लोबल पैटर्न मैच चल रहा है :%s/^A\.//। उत्तर में विधि ^A\.पैटर्न को खुद (बल्कि उनकी अनुपस्थिति) पर कब्जा नहीं करती है , इसलिए यह उन तारों को स्पष्ट तरीके से संशोधित नहीं कर सकता है।
डैनियल एंडरसन

7

यह भी काम करता है (जब पहली पंक्ति के साथ शुरू होता है A.)

:v/^A/-1j!

वह काम करता है! अच्छा लगा। +1
ज़ेस्टर

वैश्विक एंटी-पैटर्न मैच (v) के बाद Yay, सत्य और दो तरकीबें मेरे लिए नई हैं: ज्वाइन करने के लिए 'j', और '!' एक स्थान जोड़ने के बिना शामिल होने के लिए। धन्यवाद।
फोर्ट

@ मेरो वाह! मैं आपको सलाम करता हूं सर। यदि आप समझा सकते हैं कि यह सुपर क्यों काम करता है तो ..! मुझे भी बीच में टैब कैरेक्टर वाली लाइनों को बदलना था ... इसलिए मैंने जो किया था उसे जारी करने से पहले हर लाइन के / $ / \ t / g टैब कैरेक्टर एंड के रूप में जोड़ना था। ऊपर आदेश .. किसी भी बेहतर तरीका
ihightower
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.