2012-08-16 10 views
67

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

उदाहरण:

line that will be copied. 

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

मुझे क्या करना कोशिश कर रहा हूँ:

yy 
dd 
p 

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

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

एक और संबंधित सवाल यह है कि मैं कैसे सम्मिलित मोड में एक शब्द को हटाने के लिए आगे बढ़ सकता हूं? मुझे Ctrl + w जैसा कुछ चाहिए।

+4

संभावित डुप्लिकेट [में विम रजिस्टर में पाठ डाले बिना हटाने का कोई तरीका है?] (Http://stackoverflow.com/questions/54255/in-vim-is-there-a-way-to- हटाए बिना-टेक्स्ट-इन-द-रजिस्टर) – eckes

उत्तर

70

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

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

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

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

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

+1

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

6

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

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

15

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

nnoremap d "_d 
vnoremap d "_d 
+4

तो आप कैसे कटौती करते हैं? – VitalyB

+2

'x' के साथ' v/V' भी कट गया है। और 'x' के साथ काटना किसी भी ओएस में 'Ctrl + x' के साथ भी सुसंगत है। – FaithReaper

39

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

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

yy 
dd 
"0p 
5

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

तो इन आदेशों आप अपने उदाहरण के अनुसार उपयोग करना चाहते हैं

  • घ => "हटाएँ"
  • नेता घ => "कट"
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 के टुकड़े कर देगा ", डी" अपने नए कटौती आदेश हो।

आप इन मैपिंग,, एक साझा सिस्टम क्लिपबोर्ड विन्यास के साथ togther का उपयोग https://github.com/pazams/d-is-for-delete

+1

यह उत्कृष्ट है, धन्यवाद –

1
yy 
Vx 
p 

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