विम में कैसे हटाएं (कट नहीं करें)?


145

मैं अपने डिफ़ॉल्ट बफर में डाले बिना किसी पंक्ति को कैसे हटा सकता हूं?

उदाहरण:

line that will be copied.

line that I want to be substitued with the previous one.

मैं क्या करने की कोशिश कर रहा हूँ:

yy
dd
p

लेकिन विम हटाए गए (कटे हुए) एक के साथ हाल ही में कॉपी किए गए स्ट्रिंग को बदल देता है। मुझे पता है कि मैं बफ़र्स का उपयोग कर सकता हूं "1yy, ddफिर "1p, लेकिन मैं हमेशा कॉपी किए गए स्ट्रिंग को एक बफर में रखना भूल जाता हूं फिर मुझे अपनी सामग्री को पहले पेस्ट करना होगा (पंक्ति की प्रतिलिपि बनाई जाएगी) और फिर जो मैं चाहता हूं उसे हटा दें (मुझे जो लाइन चाहिए) पिछले एक के साथ प्रतिस्थापित किया जाए।)

मैं वास्तव में वी (एम) में एक पाठ को बिना कॉपी किए कैसे हटा सकता हूं?

एक अन्य संबंधित प्रश्न यह है कि मैं इन्सर्ट मोड में किसी शब्द को कैसे हटा सकता हूँ? मुझे Ctrl+ के समान कुछ चाहिए w


जवाबों:


130

"ब्लैक होल रजिस्टर" का उपयोग करें, "_वास्तव में कुछ हटाने के लिए "_d:। कुछ चिपकाने के लिए
उपयोग करें "_dPऔर इसे आगे चिपकाने के लिए उपलब्ध रखें।

दूसरे प्रश्न के लिए, आप उपयोग कर सकते हैं <C-o>dwइन्सर्ट मोड <C-o>को छोड़े बिना एक सामान्य कमांड निष्पादित करने के लिए उपयोग किया जाता है।

आप निश्चित रूप से टाइपिंग को बचाने के लिए अपने स्वयं के मैपिंग को सेटअप कर सकते हैं। मेरे पास ये हैं:

nnoremap <leader>d "_d
xnoremap <leader>d "_d
xnoremap <leader>p "_dP

thx, आप मेरे दोनों प्रश्नों का उत्तर दें। लेकिन मुझे समझ नहीं आया कि ये नॉरमैप कमांड मुझे कैसे मदद करेंगे। क्या मैं कट फंक्शन खो रहा हूं?
MaikoID

3
नहीं, dअभी भी "कट" और " pअभी भी" पेस्ट करता है, जबकि <leader>dअसली के लिए हटा <leader>pदिया जाता है और चयनित पाठ को निकाल देता है और डिफ़ॉल्ट रजिस्टर की सामग्री को चिपका देता है। <leader>pमुझे नाम रजिस्टरों का उपयोग किए बिना एक ही पाठ को कई बार पेस्ट करने की अनुमति देता है।
रोमेनिल

119

ब्लैक होल रजिस्टर "_ चाल करना होगा, लेकिन वहाँ एक बेहतर समाधान है:

जब आप pकमांड (वाष्पशील) डिफ़ॉल्ट रजिस्टर की सामग्री को चिपका रहे हैं "", जिसके साथ ओवरराइट कर दिया गया है, तो लाइन को वापस दर्ज करें dd। लेकिन आप अभी भी (गैर वाष्पशील) यैंक रजिस्टर से पेस्ट कर सकते हैं "0, जिसे डिलीट कमांड द्वारा अधिलेखित नहीं किया जाएगा dd

तो ये वो कमांड्स हैं जिन्हें आप अपने उदाहरण के अनुसार इस्तेमाल करना चाहते हैं:

yy
dd
"0p

1
महान, यह स्वीकृत उत्तर होना चाहिए। जब भी मैं कुछ भी हटाता हूं, तो हर बार रजिस्टर निर्दिष्ट करने की अपेक्षा जब भी मैं पेस्ट करना चाहता हूं, तो मैन्युअल रूप से निर्दिष्ट करना बहुत आसान है।
JShorthouse

44

यह उन चीजों में से एक है जिसे मैंने विम के बारे में नापसंद किया है ... मैंने ddअपने .vimrc में ब्लैक होल रजिस्टर में मैपिंग को समाप्त कर दिया है और जीवन अच्छा हो गया है:

nnoremap d "_d
vnoremap d "_d

6
तो फिर तुम कैसे काटोगे?
विटालिब

11
v/Vके साथ xभी काटा जाता है। और के साथ काटना xभी Ctrl + xकिसी भी OS में सुसंगत है ।
पश्चिमीगंज

22

निम्नलिखित मैपिंग का उत्पादन होगा:

  • d => "हटाएं"
  • नेता d => "कट"
nnoremap x "_x
nnoremap d "_d
nnoremap D "_D
vnoremap d "_d

nnoremap <leader>d ""d
nnoremap <leader>D ""D
vnoremap <leader>d ""d

इसके अलावा, अल्पविराम के लिए "लीडर" कुंजी सेट करना एक अच्छा अभ्यास है, जैसे:

let mapleader = ","
let g:mapleader = ","

ये 2 स्निपेट बनाएंगे ", घ" आपके नए कट कमांड होंगे।

यदि आप साझा सिस्टम क्लिपबोर्ड कॉन्फ़िगरेशन के साथ इन मैपिंग टॉगल का उपयोग करना चाहते हैं, तो https://github.com/pazams/d-is-for-delete पर अधिक विवरण देखें


काश, मैं इस उत्तर को एक से अधिक बार बढ़ा सकता - मैं kprobst के उत्तर का उपयोग कर रहा था, लेकिन फिर एक पंक्ति में कटौती करने के लिए, मुझे yyddअपनी उंगलियों पर जो थोड़ा सा अस्थिर था , उसका उपयोग करना था ;-)
ताहिर हसन

1
इंटेलीज विचार इसके बाद बहुत अजीब अभिनय करता है। dd कुछ नहीं करता है। , d कुछ नहीं करता है
s1n7ax

मुझे समाधान बहुत पसंद है। एक चीज जो मेरे लिए काम नहीं करती थी - के साथ लाइनें काट रही है ,dd। जोड़ने के बाद nnoremap <leader>dd ""ddयह काम करना शुरू कर दिया
एलेक्सी

8

आप "_dअपने यान्त्रिक पाठ को ओवरराइट करने से रोकने के लिए उपयोग कर सकते हैं । आप जिस भी रजिस्टर में चाहें ", उसके साथ याँक्ड या डिलीट किए गए टेक्स्ट को स्टोर कर सकते हैं , और _'ब्लैक होल' रजिस्टर है, जहाँ आप ऐसे सामान भेजते हैं जिनकी आपको कोई परवाह नहीं है।

अधिक जानकारी के लिए आप टाइप :help "_या कर सकते हैं:help deleting


-1
yy
Vx
p

जब दृश्य मोड में, xचयन को हटा देगा, इसलिए यदि आप एक पूरी लाइन को हटाना चाहते हैं, तो पहले Vदृश्य मोड में लाइन का चयन करने के लिए दबाएं और फिर xचयन को हटाने के लिए दबाएं ।


3
यह हटाए गए लाइन को क्लिपबोर्ड में कॉपी करता है जो ओपी से बचना चाहता है।
aVeryStableGenius

धन्यवाद! किसी तरह यह पूरी तरह से Emacs's Evil plugin
Pedro Penna
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.