वीम में डिलीट करना और फिर नई लाइन के बिना पेस्ट करना


11

कई बार विम में मैं पूरी तरह से एक लाइन हटाना चाहता हूं, इसलिए मैं dd का उपयोग करता हूं। हालाँकि, मुझे उस लाइन को किसी दूसरी स्थिति में एक पंक्ति में पेस्ट करना होगा, लेकिन यह चिपकाने से पहले एक नई पंक्ति सम्मिलित करता है, इसलिए, वांछित परिणाम प्राप्त करना मेरे लिए बहुत मुश्किल हो जाता है। उदाहरण के लिए,

while( pasteInHere )
{
    cin >> n; // Delete this line completely with dd
}

जब मैं उपरोक्त कोड के साथ ऐसा करता हूं:

while( pasteInHere )
cin >> n; // Delete this line completely with dd
{
}

जो मैं चाहता हूं उस परिणाम से बहुत दूर है ... मैं इस नए व्यवहार को कैसे दबा सकता हूं, या किसी अन्य विधि का उपयोग कर सकता हूं जो इसे बहुत कुशलता से करता है? मुझे नहीं लगता कि d $ अच्छा है क्योंकि मुझे न केवल लाइन की शुरुआत करनी है, बल्कि अगर मैं खाली लाइन को हटाना चाहता हूं तो मुझे इसे दूसरे रजिस्टर में डिलीट करने की जरूरत है, मुझे लगता है कि एक आसान तरीका होना चाहिए! धन्यवाद।



1
यह एक डुप्लिकेट नहीं है, जैसा कि मैंने कहा कि मैं एक अधिक कुशल तरीका चाहता हूं तो लाइन की शुरुआत करने जा रहा हूं, मैं वास्तव में न्यूलाइन चरित्र के साथ पूरी लाइन को निकालना चाहता हूं .... न केवल लाइन की सामग्री
frere

ओह, मैं देख रहा हूं कि अब आपका क्या मतलब है। यह मेरे लिए बहुत स्पष्ट नहीं था कि आप क्या हासिल करना चाहते हैं।
एवरग्रीनट्री

1
0Dलाइन ब्रेक को छोड़कर लाइन हटाएं। और gJलाइनों में शामिल होने की तुलना में । अब आप टेक्स्ट को बिना ब्रेक लाइन और बिना खाली लाइन के रख सकते हैं।
एलेक्स क्रॉल

जवाबों:


9

आप जिस लाइन को हटाना चाहते हैं, उसके ऊपर की लाइन में आप कहीं भी जा सकते हैं, फिर इच्छित बिंदु पर JDइसे दबाएं और चिपकाएँ p

  • Jदो पंक्तियों में शामिल हो जाता है और आपको उस पाठ की शुरुआत में ले जाता है जिसे आप हटाना चाहते थे। यह एक नया-पंक्ति वर्ण और उस पंक्ति का इंडेंटेशन हटा देता है जिसे आप स्थानांतरित करना चाहते हैं।
  • D वर्तमान कर्सर स्थिति से पंक्ति के अंत तक हटाता है लेकिन नई-पंक्ति वर्ण को संरक्षित करता है।

संकेत: आप उपयोग कर सकते हैं :puयदि आप के साथ हटाए गए Dया के साथ yanked y$और आप एक नई लाइन के साथ पेस्ट करना चाहते हैं ।


3

वास्तव में सरल नहीं है, लेकिन थोड़ा और अधिक कुशल है, और आप दोनों अनुक्रम के लिए सामान्य-मोड मानचित्र भी बना सकते हैं:

  • yanking: उस पंक्ति पर जाएं जिसे आप स्थानांतरित करना चाहते हैं, फिर ^D"_dd
  • चिपकाना: उस शब्द पर जाएं जिसे आप बदलना चाहते हैं, फिर viwp

2

आप कुछ है कि एक साथ बहुत अच्छी तरह से काम करता है प्राप्त कर सकते हैं imap। निम्नलिखित को अपने में जोड़ें vimrc:

inoremap <c-a> <c-r>1<esc>k$Jxi

यह उस के लिए एक मैपिंग बनाएगा CTRL-aजो पिछले हटाए गए पाठ ( ddया समान) को चिपकाएगा। यदि आप पसंद करते हैं, तो आप निश्चित रूप से मानचित्रण के लिए एक अलग कुंजी का उपयोग कर सकते हैं।

संदर्भ:

:h i_CTRL-R
:h quote1
:h J

1

यह मेरे लिए भी एक सा हो गया है, पहले इसे अनुकूलित करने के बारे में कभी नहीं सोचा था लेकिन यह मैपिंग काम करती है:

nmap dil ^d$

dil"पंक्ति में नष्ट", समान है diw, di"आदि


1

नई लाइन के बिना पेस्ट करें

इसे अपने .vimrc फ़ाइल में रखें:

" Paste yanked line without line breaks before/after cursor position
nnoremap gP i<CR><Esc>PkJxJx
nnoremap gp a<CR><Esc>PkJxJx

उदाहरण:

<span style="color:">danger</span>

अब आप gpडालने के #D51B3Fबाद टाइप कर सकते हैं color:जबकि मेरा कर्सर :नॉर्मल मोड में है।

नई लाइन के बिना यान

Flukus के उत्तर का उपयोग करें:

" Delete current line without yanking the line breaks
nnoremap dil ^d$

इनर लाइन को हटाने के रूप में । इससे प्रमुख इंडेंटेशन से भी छुटकारा मिल जाता है।


0

आप उस पाठ का चयन कर सकते हैं जिसे आप दबाकर कॉपी करना चाहते हैं vऔर फिर इसे दबाकर बफर में ले जाएँ yऔर फिर इसे कहीं भी चिपकाएँ p। यह किसी भी नई लाइन सम्मिलित नहीं करता है।


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