विम के लिए \ ra newline क्यों है?


253

सवाल से विम में एक नई लाइन के लिए एक चरित्र को कैसे बदलना है? । इस तरह एक नई पंक्ति के लिए पाठ को प्रतिस्थापित करते समय आपको \ r का उपयोग करना होगा

:%s/%/\r/g

लेकिन जब एक चरित्र के लिए लाइनों की समाप्ति और नई लाइनों की जगह, आप ऐसा कर सकते हैं:

:%s/\n/%/g 

मैनुअल के किस खंड में ये व्यवहार हैं, और उनके पीछे तर्क क्या है?


1
%खोज करने और बदलने के लिए क्या है ?
QED

7
@qed: डिफ़ॉल्ट रूप :sसे केवल वर्तमान लाइन के प्रतिस्थापन को लागू करेगा। :%sयह पूरी फाइल को संबोधित करता है। अधिक
c24w

3
+ c24w मुझे लगता है कि वह स्लैश के बीच '%' का उल्लेख कर रहा है, पहला उदाहरण '%' खोज स्थान में है, और दूसरे उदाहरण में प्रतिस्थापित स्थान पर है, लेकिन @qed आपके प्रश्न का उत्तर देने के लिए, उन '%' का शाब्दिक रूप से मिलान किया जाता है।
रास्तजेडी

जवाबों:


154

पैटर्न पर विम डॉक्स से :

\r मैचों <सीआर>

\n एक अंत-रेखा से मेल खाता है - जब बफर टेक्स्ट के बजाय एक स्ट्रिंग में मिलान करना एक शाब्दिक न्यूलाइन वर्ण से मेल खाता है।


41
मेरे लिए भ्रम की बात यह है कि जब खोज पैटर्न और प्रतिस्थापन पैटर्न का उपयोग किया जाता है तो \ r और \ n अलग-अलग चीजें होती हैं।
dlamblin 17

3
@dlamblin युप! मेरा उत्तर देखें :)
सीमित प्रायश्चित

206

से http://vim.wikia.com/wiki/Search_and_replace :

जब खोज हो रही है

...

\nन्यू लाइन, है \rहै CR(गाड़ी वापसी = Ctrl-M= ^M)

जब की जगह

...

\rन्यूलाइन है, \nएक अशक्त बाइट ( 0x00) है।


6
इस जवाब ने मुझे सबसे ज्यादा मदद की। इसके अलावा, अधिक जानकारी के लिए :h :s%, विशेष रूप से अंतिम पैराग्राफ। (के माध्यम से :h :s)
dipnlik

113

इसका एक और पहलू है \0, जो पारंपरिक रूप से NULL है, जिसका s//\0/अर्थ "पूरे मिलान पैटर्न" से लिया जाता है। (जो, वैसे, के साथ बेमानी है, और अब से, &)।

  • तो आप \0मतलब के लिए उपयोग नहीं कर सकते NULL, तो आप का उपयोग करें\n
  • तो आप \nमतलब के लिए उपयोग नहीं कर सकते \n, तो आप का उपयोग करें \r
  • तो आप \rमतलब के लिए उपयोग नहीं कर सकते हैं \r, लेकिन मुझे नहीं पता कि कौन उद्देश्य पर उस चार को जोड़ना चाहेगा।

-☈


1
अच्छी बात! तो यह \ 0 के आसपास एक हैक है - 0-नेस्टेड समूह के लिए पश्चगामी - पूरे regexp। यह एक बहुत अच्छा उत्तर है, लेकिन यह मुझे असंतुष्ट कर देता है, कि मैं प्रतिस्थापन में \ r का उपयोग नहीं कर सकता ... (अर्थ: सम्मिलित करें # (13), उदाहरण के लिए "सामान्य" फ़ाइल (== यूनिक्स EOLs) में।
टॉमस गैंडर

3
ठीक है, उत्तर विम डॉक्स में है। बस एक सामान्य बैकस्लैश के साथ \ ^ M या \ <CR> बच जाएं। अच्छा लगा। ----- <CR> इस बिंदु पर दो में विभाजित लाइन (CTRL-V <Enter> के रूप में <CR> टाइप करें) <CR> \ r idem -------- s / \ r \ < CR> गाड़ी-वापसी (CTRL-M) डालें (टाइप करें <CR> CTRL-V <Enter>) s / \ <CR> के रूप में
टॉमस गैंडर

16
"एक और पहलू"? तुम बहुत विनम्र हो! यह बताते हुए कि यह कैसे काम करता है, सभी लोगों को बेहतर उत्तर के लिए बनाता है। +1
अंडरस्कोर_ड

यह ईमानदारी से वास्तव में महान अंतर्दृष्टि है कि \nखोज और प्रतिमानों को बदलने के विभिन्न अर्थ क्यों हैं । शानदार जवाब।
ZeroKnight

47

:help NL-used-for-Nul

तकनीकी विवरण:

<Nul>फ़ाइल में वर्ण <NL>स्मृति के रूप में संग्रहीत हैं । प्रदर्शन में उन्हें " ^@" के रूप में दिखाया गया है । अनुवाद फ़ाइलों को पढ़ने और लिखने पर किया जाता है। <Nul>खोज पैटर्न के साथ मिलान करने के लिए आप बस CTRL- @ या " CTRL-V 000" दर्ज कर सकते हैं । यह शायद सिर्फ वही है जो आप उम्मीद करते हैं। आंतरिक रूप से चरित्र को <NL>खोज पैटर्न में बदल दिया जाता है । क्या असामान्य है कि CTRL-V टाइपिंग CTRL- J भी सम्मिलित करता है <NL>, इस प्रकार <Nul> फ़ाइल में भी खोज करता है। {Vi <Nul>फाइल में वर्णों को बिल्कुल भी नहीं संभाल सकता है }



10

सबसे पहले, :h :s"बदलें" पर प्रलेखन के अनुभाग "4.2 स्थानापन्न" को देखने के लिए खोलें । यहाँ आदेश क्या स्वीकार करता है:

:[range]s[ubstitute]/{pattern}/{string}/[flags] [count]

patternऔर के बारे में विवरण नोटिसstring

के लिए {pattern}देखें |pattern|
{string}शाब्दिक स्ट्रिंग, या कुछ
विशेष हो सकता है; देखते हैं |sub-replace-special|

तो अब आप जानते हैं कि खोज पैटर्न और प्रतिस्थापन पैटर्न विभिन्न नियमों का पालन करते हैं। यदि आप लिंक का अनुसरण करते हैं |pattern|, तो यह आपको उस खंड में ले जाता है, जो विम में उपयोग किए गए पूरे regexp पैटर्न की व्याख्या करता है।

इस बीच, |sub-replace-special|आपको "4.2 सब्स्टीट्यूट" के उप-भाग में ले जाता है, जिसमें प्रतिस्थापन के लिए पैटर्न होते हैं, जिसके बीच में \rलाइन ब्रेक / विभाजन होता है।

(मैनुअल के इस भाग का शॉर्टकट है :h :s%)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.