चयनित टेक्स्ट-ब्लॉक में टेक्स्ट को आंशिक रूप से कैसे बदलें?


14

मेरी समस्या के लिए एक अच्छा शीर्षक ढूंढना आसान नहीं है।

मुझे टेक्स्ट-ब्लॉक के सामने डालने की जानकारी है:

Ctrl- v लाइनों का चयन करें I पाठ टाइप करें ESC

अब मैं ऐसा करना चाहूंगा, लेकिन अपने ब्लॉक चयन में एक हिस्से को बदलने के साथ भी। वर्तमान में मैं दो ऑपरेशन कर रहा हूं

Ctrl- v चयन ब्लॉक x शुरू करने के लिए वापस जाओ

ऊपर बताए गए क्रम से अनुसरण किया।

क्या ब्लॉक ( Ctrl- v) को केवल एक बार चुनकर इन दोनों परिचालनों को मिलाने का कोई तरीका है ?

यहाँ एक छोटा सा उदाहरण है:

मैं निम्नलिखित ब्लॉक को बदलना चाहूंगा

1  text
2  text
3  text
4  text
5  text

में

new text 
new text 
new text 
new text 
new text

केवल एक "ऑपरेशन" कर रहा है।


1
मुझे 100% यकीन नहीं है कि आप क्या चाहते हैं, शायद एक वास्तविक उदाहरण मदद करेगा (आपके पास क्या है जो आप चाहते हैं)। क्या आप जीवी के बारे में जानते हैं? यह अंतिम दृश्य चयन को बदलता है और यहां मदद की हो सकती है।
फिलिपफ्रैंक

जवाबों:


21

cअपने ब्लॉक का चयन करने के बाद टाइप करने से चयन ब्लॉक xमें पाठ हटा दिया जाएगा और सम्मिलित मोड में प्रवेश होगा। एक बार जब आप कुछ टाइप करते हैं और इंसर्ट मोड से बाहर निकल जाते हैं, तो आपको हर लाइन पर समान बदलाव करना चाहिए।

प्रयत्न

Ctrl- v- चुनें ब्लॉक - c- जो भी डालें -Esc


1
    1
   1 1
  1   1
 1111111
 1     1
 1     1
 1     1

ऊपर की तरह तीन अलग-अलग ब्लॉक अक्षरों की एक पंक्ति चित्र। ^Vउपरोक्त का चयन करते हुए, मैं Aअसमान लंबाई की रेखाओं के कारण पंक्ति के अंतिम अक्षर में सभी को नहीं बदल सका । पिछले ब्लॉक लेटर्स ने ठीक काम किया :s/\%V1/T/g "पिछला ब्लॉक लेटर एक टी था जो '1's' से बनाया गया था। /T/जो भी हो उसे बदलें ।

लेकिन इसके ऊपर दिखाए गए अंतिम ब्लॉक लेटर को चुनने से केवल 'ए' से 'ए' के ​​बिंदु तक सभी बदल जाते हैं, और बाकी चीजें पूरी हो जाती हैं।

* सबसे छोटी रेखा।

सभी लाइनों को समान लंबाई बनाने के लिए मैंने उन्हें रिक्त स्थान के साथ गद्देदार किया। (मैं नया हूँ, इसलिए मुझे यकीन है कि एक बेहतर स्क्रिप्ट लिखी जा सकती है।)

नोट: A का शिखर लाइन 2 पर शुरू हुआ।

let Maxlen = 0
" Find longest line
for i in range(2,8)
    let t = getline(i)
    let a = strlen(t)
    if a > Maxlen
        Maxlen = a
    endif
endfor

" Append spaces 'til all lines are the same length.
for i in range(2,8)
    let t = getline(i)
    let a = strlen(t)
    if a < Maxlen
        let b = Maxlen - a
        execute "normal!" . i . "gg0" . b . "A "
    endif
endfor

इसके बाद, :s/\%V1/T/g पंक्ति में अंतिम ब्लॉक अक्षर पर विज्ञापित के रूप में काम किया।

पुनश्च मैंने पढ़ा है कि executeऊपर की रेखा डॉट्स के बिना काम करना चाहिए, लेकिन यह मेरे लिए काम नहीं किया।


एग्जीक्यूट लाइन, ब्लॉक लेटर की पंक्ति I की शुरुआत और लाइन के अंत में बी स्पेस जोड़ते हैं। 'b' वर्तमान लाइन और सबसे लंबी लाइन के बीच की लंबाई में अंतर है।
रॉन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.