प्रत्येक / विषम रेखा पर क्रमांकित पाठ डालें


1

विम में मैं निम्नलिखित पाठ है:


Door

Chair

Table

Uganda

और मैं हर विषम रेखा पर संकलित पाठ जोड़ना चाहता हूं, जो इसे देना चाहिए:

>item1
Door
>item2
Chair
>item3
Table
>item4
Uganda

क्या यह विम में संभव है?


हां, यह संभव है। (आपने क्या प्रयास किया है?)
Ingo Karkat

यह और यह काम किया;) :let i = 1 | g/^$/execute "normal i>item" . i | let i = i + 1
Mehdi Nellen

प्रश्न पूछने से पहले मेरा मतलब है :-) अपने प्रयासों को दिखाते हुए और यह बताकर कि आपको किन भागों से कठिनाई हो रही है, हम आपकी दक्षता की बेहतर समझ प्राप्त कर सकते हैं और अधिक सटीक उत्तर दे सकते हैं। जैसा कि यह खड़ा है, ऐसा लगता है कि आपने एक आवश्यकता पोस्ट की है और चाहते हैं कि कोई व्यक्ति आपके लिए अपना कोड लिखें।
Ingo Karkat

हाँ मैं जानता हूँ। लेकिन मैंने सिर्फ यह पूछा कि क्या यह एक प्रयास करने से पहले भी संभव है। बहुत आलसी आपको नहीं लगता? वैसे भी, यह अच्छा है अगर लोग इस सवाल को google'ing करने के बाद इस पेज पर आते हैं और मेरे घटिया प्रयासों से भ्रमित हुए बिना समस्या / उत्तर को सीधे पढ़ सकते हैं :)
Mehdi Nellen

जवाबों:


4

आप इस आदेश को आजमा सकते हैं, जो सुनने में जैसा लगता है, बढ़ता है i प्रत्येक मैच पर:

:let i = 1 | g/^$/execute "normal i>item" . i | let i = i + 1

1

यहाँ यह करने के लिए एक vimcript है:

:for s:i in range(1, line("$") / 2)
:  execute "normal " . eval(s:i * 2 - 1) . "gg"
:  execute "normal a" . ">item" . s:i
:endfor
  • लूप ओवर आधा फ़ाइल में लाइनें (क्योंकि हम केवल विषम वाले चाहते हैं)।
  • उचित लाइन नंबर (आइटम नंबर * 2 - 1 अगली विषम लाइन देगा) का उपयोग करके ले जाएं gg
  • जोड़ना >itemX लाइन के लिए, जहां X आइटम नंबर है।

आप इसे सीधे vim कमांड लाइन पर इनपुट कर सकते हैं, या किसी फ़ाइल में रख सकते हैं और फिर इसका उपयोग करके निष्पादित कर सकते हैं :source <filename>

वैकल्पिक रूप से, आप इसे अपने .vimrc में एक फ़ंक्शन के रूप में जोड़ सकते हैं, और फिर इसका उपयोग करके निष्पादित कर सकते हैं :call <funcname()>

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