2013-07-16 6 views
9

मान लीजिए आप इस पाठ है:विम का उपयोग कर पैटर्न पर आधारित टेक्स्ट को एकाधिक पंक्तियों में कैसे विभाजित करें?

name1 = "John"; age1 = 41; 
name2 = "Jane"; age2 = 32; 
name3 = "Mike"; age3 = 36; 
... 

और आप दो पंक्तियों में प्रत्येक पंक्ति विभाजित करने के लिए इस तरह एक परिणाम देना चाहता हूँ:

name1 = "John"; 
age1 = 41; 
name2 = "Jane"; 
age2 = 32; 
name3 = "Mike"; 
age3 = 36; 
... 

आप इस आपरेशन कैसे को स्वचालित चाहते हैं?

कुछ नोट:
(1) आभासी-vode में पाठ,
(2) निष्पादित :'<,'>:norm ^3f r^M *** का चयन करें,
यह लेकिन:

  1. मैं पहले से ही निम्न विधि की कोशिश की सही ढंग से काम नहीं करता है; यह लाइनों का केवल आधा हिस्सा विभाजित करता है, क्योंकि प्रत्येक पंक्ति टूटने के बाद, कमांड का अगला पुनरावृत्ति अगली पंक्ति के बजाय टूटी हुई रेखा के बाकी हिस्सों पर लागू होता है!
  2. यह एक मैक्रो का उपयोग करके हासिल किया जा सकता है लेकिन मैं अधिक सुरुचिपूर्ण समाधान की तलाश में हूं।


*** अनुक्रम के स्पष्टीकरण:

- norm सामान्य मोड
में निम्नलिखित आदेशों को क्रियान्वित करने के लिए - कर्सर को शुरूआत में जाने के लिए ^ लाइन
- 3f<space> के लिए आर लाइन
में 3 स्थान के लिए कर्सर को ले - एक नया ऑनलाइन

+0

के संभावित डुप्लिकेट [कैसे विम में एक नई पंक्ति के लिए एक चरित्र को बदलने के लिए?] (Http : //stackoverflow.com/questions/71323/how-to-replace-a-character-for-a-newline-in-vim) –

उत्तर

24

पूरी फ़ाइल पर काम करने के लिए के साथ है कि अंतरिक्ष की जगह के लिए r^M, इस का उपयोग करें:

:%s/; /;\r/ 

संचालित करने के लिए केवल चयनित पाठ पर, इस का उपयोग करें:

:'<,'>s/; /\r/ 

अंग्रेज़ी अनुवाद:

"सेमी-कोलन एक अंतरिक्षसेमी-कोलन के साथ एक नई पंक्ति के बाद के बाद की प्रत्येक पुनरावृत्ति बदलें।"

स्पष्टीकरण:

% - operate on the entire file 
s - substitute 
/ - symbol that separates search/replace terms 
; - the character you're searching for (notice I added a space) 
;\r - the replacement text (semi-colon followed by newline) 

कि के रूप में यह Vi में प्रतिस्थापन के लिए हो जाता है के बारे में के रूप में बुनियादी है।


अधिक geekiness के लिए:

मैं वास्तव में है के बाद मेरे .vimrc फ़ाइल में परिस्थितियों के लिए इस तरह मैप किया गया:

" 
" add a newline after each occurrence of the last search term 
" 
nnoremap SS :%s//&\r/<CR> 

यह आदेश की पहली आवृत्ति पर एक फ़ाइल की प्रत्येक पंक्ति विभाजन अंतिम खोज पैटर्न।

तो, आपके उपयोग-मामले के लिए आप इस करना होगा:

  1. खोज (आप पर निर्भर है कि आप या एक रिक्ति शामिल करना नहीं चाहते हो सकता है हो सकता है ...) ; के लिए
  2. प्रकार निम्न आदेश सामान्य मोड में: SS

अपनी फ़ाइल की प्रत्येक पंक्ति पहले ; प्रतीक पर विभाजित हो जाएगा।

स्पष्ट करने के लिए, आप निम्न 5 कीस्ट्रोक्स का प्रयोग करेंगे:

/;ENTERएसएस

यह जल्दी से स्वरूपण XML, HTML, आदि के लिए बहुत आसान है ...

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

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