विम - दो \ n के साथ एक नई लाइन \ n कैसे बदलें


34

Vim एडिटर में, मैं एक नई लाइन वर्ण (\ n) को दो नई लाइन वर्णों (\ n \ n) के साथ बदलना चाहता हूं ताकि vim कमांड मोड का उपयोग किया जा सके।

इनपुट फ़ाइल सामग्री:

This is my first line.
This is second line.

आज्ञा जो मैंने कोशिश की:

:%s/\n/\n\n/g

यह स्ट्रिंग को अनचाहे अक्षरों से बदल देता है

This is my first line.^@^@This is second line.^@^@

फिर मैंने निम्नलिखित कमांड की कोशिश की

:%s/\n/\r\r/g

यह ठीक से काम कर रहा है। क्या आप बता सकते हैं कि यह दूसरी कमांड के साथ ठीक क्यों काम कर रहा है?




2
ध्यान दें, आपको /विभाजक के रूप में उपयोग करने की आवश्यकता नहीं है । यह अधिक पठनीय है::%s;\n;\n\n;g
DJMcMayhem

1
के लिए खोज \n, के साथ बदलें \r\r, :% s/\n/\r\r/g: stackoverflow.com/a/71334/911945
एंटोन तारासेन्को

जवाबों:


47

अजीब तरह से पर्याप्त है, प्रतिस्थापन के\n लिए विम का मतलब न्यूलाइन नहीं है, लेकिन अशक्त है। ASCII nul है ( )।^@control@

ऐतिहासिक रूप से, vi की जगह ^M( controlM) लाइन न खत्म होने वाली है, जो न्यू लाइन है। vim ने \rइसका मतलब निकालने के लिए (C भाषा की तरह) एक एक्सटेंशन जोड़ा ^M, लेकिन डेवलपर्स ने टेक्स्ट की जगह\n मीनिंग नल बनाने के लिए चुना । यह खोजों में इसके उपयोग के साथ असंगत है , जो एक नई खोज करता है।

आगे की पढाई:


7

इसे आज़माएँ: %s/$/^V^M/(जहाँ ^Vहै Ctrl-Vऔर ^Mहै Ctrl-M- जब आप टाइप ^Vकरेंगे ^तो यह एक चार प्रिंट करेगा, उसके ऊपर बैकस्पेस और फिर जब आप टाइप ^Mकरेंगे तो यह दिखाई देगा ^M... Ctrl-V मानक tty शाब्दिक अगला वर्ण है - कमांड stty -aको चलाने के लिए अपने tty के विशेष आकर्षण दिखा)।


वास्तव में, बहुत अनुभवी इसे DRL2unix या इसी तरह का उपयोग करने और छोड़ने के विकल्प के रूप में CRLF से आवश्यक रूपांतरण के लिए जानते हैं। Ctrl-V उपयोग एक दिन का 1 vi पाठ है।
mckenzm

5

vimस्मृति में \nएक अशक्त चरित्र का प्रतिनिधित्व करने के लिए उपयोग करें \0, कि कैसे vimहैंडल फ़ाइल में अशक्त वर्ण (जबकि viनहीं हो सकता) है।

\nबफ़र में लाइन के केवल मैच एंड का उपयोग, अभिव्यक्ति में उपयोग करते समय स्ट्रिंग में न्यूलाइन नहीं।

देखें : h NL-used-for-Null और : h CR-used-for-NL अधिक जानकारी के लिए।


1

Neovim ( nvim) और Vimसंस्करणों के साथ परीक्षण किया गया

NVIM v0.3.0
VIM - Vi IMproved 8.1

एक नई लाइन निकालें:

cell
allele
rs2981578
fgfr2

यहाँ, \nमेल खाती है ( हालांकि, एक नई लाइन डालने के लिए \r) का उपयोग करें :

:'<,'>s/\n/|/g

cell|allele|rs2981578|fgfr2

एक नई पंक्ति जोड़ें:

नहीं:

cell|allele|rs2981578|fgfr2

:'<,'>s/\n/|/g

cell^@allele^@rs2981578^@fgfr2

^@LF (पंक्ति फ़ीड; देखें http://vimhelp.appspot.com/digraph.txt.html#digraphs-default ) के लिए एक विशिष्ट चिह्न है

हाँ:

cell|allele|rs2981578|fgfr2

:'<,'>s/|/\r/g

cell
allele
rs2981578
fgfr2

ओपी के सवाल ( \nदो के साथ एक को कैसे बदलें \n\n) को संबोधित करने के लिए , बस एक और जोड़ें \r:

cell
allele
rs2981578
fgfr2

:'<,'>s/\n/\r\r/g

cell

allele

rs2981578

fgfr2

... यानी मूल न्यूलाइन ( \n) से मेल खाते हैं , और इसे दो नईलाइन / गाड़ी के रिटर्न ( \r\r) से बदलें ।

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