2010-04-20 8 views
9

हाय में Gvim मुझे फ़ाइल में प्रत्येक टिप्पणी से पहले एक खाली रेखा या दो डालने की जरूरत है।वीआईएम में प्रत्येक टिप्पणी (जैसे "#") से पहले मैं एक रिक्त रेखा कैसे डालूं?

जैसे

#comment 1 
#comment 2 
statement 1 
statement 2 
#comment 3 

comamnd चलाने के बाद यह

#comment 1 

#comment 2 
statement 1 
statement 2 

#comment 3 

मैं यह नहीं कैसे करते होना चाहिए?

धन्यवाद

अद्यतन: जवाब

लेकिन अगर टिप्पणियां निरंतर कर रहे हैं, मैं उन दोनों के बीच में जोड़े जाने के लिए नई पंक्ति नहीं चाहते हैं के लिए धन्यवाद। क्या इसे करने का कोई तरीका है?

जैसे

#comment 1 
#comment 2 

मैं न यह इस आदेश होने के लिए

#comment 1 

#comment 2 

उत्तर

20

आप भी इस आदेश का उपयोग कर सकते हैं: :g/^#/norm O

ठीक है, यहाँ एक स्पष्टीकरण है:

इसका मतलब यह है जो :global/^#/normal O की एक शॉर्टकट है:

  • प्रत्येक पंक्ति के लिए '#' से शुरू होने वाले (:global/^#/)
  • करना 'सामान्य मोड' (normal O) में 'ओ' आदेश - जो ऐसा करने के लिए इसका मतलब है 'ओ' कुंजी 'सामान्य' में क्या करती है (डालें और नहीं: कमांड) वीआईएम मोड। और 'ओ' एक नई लाइन डालता है।
+0

(1 लाइन के लिए भी काम करता है) मुझे लगता है कि यह सबसे अच्छा जवाब अब तक है चूंकि यह सबसे सहज है, लेकिन शायद आपको समझाया जाना चाहिए कि यह कैसे और क्यों काम करता है। – matias

+0

स्पष्टीकरण जोड़ा गया –

+0

': जी [lobal]' trumps ': s [ubstitute]' +1 आपके लिए सर –

0

उपयोग करना चाहते हैं: :%s/^\ze\s*#/\r/

1

नहीं पहली पंक्ति

उदाहरण उत्पादन की तरह वहाँ फ़ाइल में पहली पंक्ति से पहले कोई नई पंक्ति होना चाहिए लग रहा है को प्रभावित करने वाले। आप देख सकते हैं इसे प्राप्त करने के लिए चेक करें।

:%s/^\n\@<=\ze\s*#/\r/

\n\@<= से मेल खाता है वर्तमान स्थिति से पहले एक नई पंक्ति वहाँ केवल अगर है, तो पहली पंक्ति से मेल नहीं खाएगी। अधिक जानकारी के लिए :h \@<=

यह लाइन चेक के साथ भी किया जा सकता है। निम्नलिखित रेगेक्स केवल उन पंक्तियों से मेल खाता है जो पहली पंक्ति नहीं हैं। पंक्ति 1 के नीचे

:%s/^\%>1l\ze\s*#/\r/

\%>1 से मेल खाता है।देखें :h \%>l


यहाँ कुछ है कि अद्यतन सवाल के साथ काम करना चाहिए, वह है, केवल, वर्तमान पंक्ति से पहले एक नई पंक्ति जोड़ने अगर वहाँ से पहले कोई टिप्पणी नहीं की लाइन है।

:g/^\%^\@<!\(^\s*#.*\n\)\@<!\s*#/norm O

^\%^\@<! इस लाइन से मेल खाते हैं, तो फ़ाइल की शुरुआत से पहले है मत करो। :h \%^ और: एच \@<!

\(^\s*#.*\n\)\@<! पिछली पंक्ति पर पहला गैर-खाली वर्ण # नहीं है, तो केवल इस पंक्ति से मेल खाता है #।

:

इस regex वहाँ एक समाधान है, जो "असंशोधित vi" में काम करता है के रूप में अच्छी तरह से है

 
#comment 1 
#comment 2 
statement 1 
statement 2 
#comment 3 

 
#comment 1 
#comment 2 
statement 1 
statement 2 

#comment 3 
2

के लिए बदल जाएगा 2, $ जी/^ [ टैब] * #/एस/^/^ एम/

जहां टैब और^एम को संबंधित नियंत्रण चरित्र के रूप में दर्ज किया जाना चाहिए।

आशा इस मदद करता है - और मेरे धन्यवाद 1 लाइन समस्या पर

0

फिर भी एक और रास्ता ओर इशारा करते हुए के लिए हाइकी करने के लिए जाना

:s/^[ TAB]*#-1s/^/\r/ 
संबंधित मुद्दे