2012-05-17 11 views
16

आदेश में "&" से प्रत्येक घटना को बदलने के लिए करने के लिए "& &" के लिए, मैं जारी :.,+30s/\\&/\\&\\&/g पर 30 अधिक लाइनों को चालू लाइन से रेंज में जगह ले लेकिन विम कहते हैं, "पैटर्न नहीं मिला "। मैं डबल बैकस्लैश "\" द्वारा विशेष चरित्र "&" से बच रहा हूं।vim: खोज और "&"

उत्तर

13

सबकुछ से बचने की कोशिश न करें - :.,+30s/&/&&/g मेरे लिए काम करता है।

+12

स्पष्ट करने के लिए: ऐसा इसलिए नहीं है क्योंकि '&' मेटाएक्टेक्टर नहीं है: जबकि पैटर्न में यह सत्य है (जब तक '& 'बच निकला नहीं गया था या बहुत जादू मोड सक्रिय किया गया था), प्रतिस्थापन स्ट्रिंग' & 'का मतलब' \ 0' जैसा है: संपूर्ण मिलान वाले सबस्ट्रिंग। चूंकि "पूरी मिलान वाली सबस्ट्रिंग" एक एम्परसेंड है, यह समाधान काम करता है। ध्यान दें कि यदि 'जादू' विकल्प बंद कर दिया गया था, तो कथन "और प्रतिस्थापन में संपूर्ण मिलान पैटर्न का प्रतिनिधित्व करता है" ': s' सहित कई आदेशों में गलत है। – ZyX

10

आपको नियमित अभिव्यक्ति के पहले भाग में एम्परसैंड से बचने की आवश्यकता नहीं है। यह केवल दूसरे (प्रतिस्थापित) भाग में विशेष अर्थ है।

आप "\ &" कहने वाले पैटर्न की तलाश में हैं और उन्हें "\ & \ &" पैटर्न के साथ प्रतिस्थापित करें।

को बदलने के लिए आसान तरीका सिर्फ है: & है भाग निकले जा करने के लिए _&&_ रहे हैं:

:.,+30s/&/&&/g 
1

यह भी उपयोगी टिप्पणी है कि यदि आप उदाहरण के लिए & स्थिति को बदलने की जरूरत हो सकती है केवल वैकल्पिक अभिव्यक्ति के प्रतिस्थापन बयान में:

:.,+30s/ &/\& /g 
     ^