रजिस्टर को साफ किए बिना कुछ संचालन करना


30

अक्सर, कॉन्फ़िगरेशन फ़ाइलों में मैं लाइनों के एक ब्लॉक को कॉपी और पेस्ट कर सकता हूं, फिर मैं उस ब्लॉक में छोटे बदलाव करना चाहता हूं। चिपकाने के बाद, मैं उन xपात्रों को हटाने के लिए उपयोग करता हूं जिन्हें मैं हटाना चाहता हूं, फिर अगले ब्लॉक को पेस्ट करने के लिए आगे बढ़ें। सिवाय xहटाए गए वर्णों को क्लिपबोर्ड पर रखता है, इसलिए मुझे फिर से लाइनों के ब्लॉक को फिर से बनाना होगा।

क्या इन्सर्ट मोड में जाए बिना ऐसा करने का कोई तरीका है?


जैस्पर को स्टैक ओवरफ्लो पर समान प्रश्न मिले : [अपने आखिरी यान को ओवरराइट किए बिना विम में हटाने का कोई तरीका? [डुप्लिकेट]] ( stackoverflow.com/questions/3638542/… ) और vim रजिस्टर में टेक्स्ट डाले बिना डिलीट करने का कोई तरीका है?
गिल्स एसओ- बुराई को रोकना '

जवाबों:


35

आपके विकल्प हैं:

  1. ब्लैक होल रजिस्टर का उपयोग करें _। उदाहरण के लिए, एक पंक्ति को हटाने के लिए आप टाइप करेंगे "_dd। यह क्लिपबोर्ड को प्रभावित किए बिना हटा देता है।
  2. स्पष्ट रूप से मूल यान के लिए एक रजिस्टर का नाम दें। उदाहरण के लिए, एक नामित रजिस्टर में एक पंक्ति को yank करने के लिए जिसे आप टाइप करेंगे, "ayyउसके बाद आप टाइप करेंगे"ap
  3. इसके बजाय मूल यान को पुनः प्राप्त करने के लिए yank रजिस्टरों का उपयोग करें। आप yank कर सकते हैं, फिर आवश्यकतानुसार हटा सकते हैं, फिर जब आप पेस्ट टाइप पर जाएंगे"0p
  4. कट ऑपरेटर प्रदान करने के लिए vim-easyclip जैसे प्लगइन का उपयोग करें जो डिलीट ऑपरेटर से अलग है (पूर्ण प्रकटीकरण: मैंने लिखा है कि)

:help registersपहले 3 पर अधिक विवरण के लिए चलाएँ


4
तो xमैं के लिए उपयोग करेंगे "_x?
डुर्रोन 597

1
यह सही है।
स्टीव वर्म्यूलेन

2
@ Durron597 यदि आप एक बार में एक वर्ण को हटा रहे हैं x, तो आपको संभवतः गति को हटाना सीखना चाहिए, dt)जो तब तक हटा देता है जब तक d2Wकि अगले दो कोष्ठक अलग-अलग टोकन को हटा नहीं देते। फिर आप "_di{एक ब्रेज़्ड क्षेत्र के अंदर कुछ ऐसा कर सकते हैं , जो कि मैं हर समय करता हूं। सामान्य मोड में इसका अर्थ है " ब्लैक होल में इस लटके हुए क्षेत्र के अंदर की सभी चीजों को हटाएं "
ओरेगॉनट्रिल

nnoremap x "_xमेरे साथ जोड़ा गया ~/.vimrc(यहाँ स्पष्टीकरण: stackoverflow.com/questions/54255/… )।
विक्टोरिया स्टुअर्ट

11

xक्लिपबोर्ड पर चीजें नहीं डालते हैं, यह उन्हें एक रजिस्टर में डालता है । यदि आप इसे नहीं बताते हैं कि इसे किस रजिस्टर में डालना है, तो यह इसे अनाम रजिस्टर में डाल देता है, जो निश्चित रूप से पिछली सामग्री को अधिलेखित करता है। इसलिए, इसके बजाय, यह बताएं कि किस रजिस्टर का उपयोग करना है:, " REGISTER xजहां REGISTER कोई एकल अक्षर है। आप फिर उसी रजिस्टर pसे चिपकाने के लिए उसी बोली-रजिस्टर उपसर्ग का उपयोग करते हैं । (नोट: लोअरकेस उनकी सामग्री को बदल देता है; अपरकेस अपेंडिक्स)।

वहाँ भी दो विशेष रजिस्टरों हैं "0और "1"0सबसे हाल ही में yanked ( y) पाठ है, जो किसी अन्य कमांड (जैसे x) के साथ कुछ पाठ हटाने पर भी बना रहेगा । "1सबसे हाल ही में हटाया गया पाठ है, जब तक कि वह पाठ छोटा (एक पंक्ति) नहीं है। छोटा हटाए गए पाठ में जाता है "-

अंत में, जैसा कि स्टीव वर्म्यूलेन बताते हैं, आप ब्लैक होल रजिस्टर को निर्दिष्ट करके हटाए गए पाठ को सहेजने के लिए नहीं बता सकते हैं "_

प्रासंगिक सहायता आदेश है :help registers


3

:letआदेश आप एक नामित रजिस्टर को फिर से परिभाषित करने देगा। Vim की कमांड लाइन में, Control+ 2 को 1 R बार दबाने और फिर रजिस्टर नाम कमांड में रजिस्टर की सामग्री को पेस्ट करेगा। फिर आप जो कुछ भी चिपका सकते हैं उसे संशोधित कर सकते हैं, और अपने संशोधनों के साथ रजिस्टर को बचा सकते हैं।

उदाहरण:

  • सामान्य मोड में, "फू बार" पाठ वाली एक पंक्ति पर, "fyyपूरी लाइन ( yy) को fरजिस्टर ( "f) में टाइप करें ।
  • टाइप करें :let @f=', और Control+ r, Control+ rफिर, फिर f, और आपको इसे "फू बार" में पेस्ट करना चाहिए, इसलिए आपकी कमांड लाइन अब पढ़ती है :let @f='Foo Bar, बहुत अंत में कर्सर के साथ।
  • अब आप तीर का उपयोग कर सकते हैं और कुंजी को हटा सकते हैं जो आपने अभी-अभी चिपकाया है, जैसे कि :let @f='foo bar baz
  • उद्धृत करना समाप्त करें: :let @f='foo bar baz'और हिट करें Enter

अब आपने fरजिस्टर की सामग्री को "फू बार बाज" के रूप में फिर से परिभाषित किया है ।

(यह मैक्रोज़ के लिए भी काम करता है! :help letअधिक जानकारी के लिए।)


1 Control + rआपको रजिस्टर डालने की सुविधा देता है, जब आप पहले से ही सम्मिलित मोड में हैं, जैसे कि आप वर्ण टाइप कर रहे हैं। इस क्रम का उपयोग करना दो बार महत्वपूर्ण है क्योंकि "पाठ शाब्दिक रूप से डाला गया है, जैसे कि टाइप किया गया नहीं। यह तब भिन्न होता है जब रजिस्टर में वर्ण होते हैं <BS>।" - Insert.txt vimdoc,:help i_CTRL-R_CTRL-R


0

"_@Derobert द्वारा उल्लिखित ब्लैकहोल रजिस्टर से संबंधित आप http://vimcasts.org/episodes/meet-the-yank-register/ में एक उपयोगी पेंचकस पा सकते हैं।

विम अधिक मानक शब्दावली कट, कॉपी और पेस्ट के स्थान पर हटाए गए शब्दों, यैंक और पुट का उपयोग करता है। एक ही अक्षर से शुरू, पुट और पेस्ट आसानी से विनिमेय होते हैं। एक बार जब आप यान शब्द का उपयोग कर लेते हैं, तो यह प्रतिलिपि का पर्याय बन जाता है। लेकिन वीम शब्द 'डिलीट' का उपयोग समस्याग्रस्त है। अधिकांश संदर्भों में, डिलीट शब्द का अर्थ केवल हटाना है। लेकिन विम का डिलीट ऑपरेशन टेक्स्ट को एक रजिस्टर में कॉपी करता है, फिर उसे डॉक्यूमेंट से हटा देता है। दूसरे शब्दों में, विम का डिलीट ऑपरेशन कट की तरह व्यवहार करता है।


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

मैंने मूल पोस्ट पर टिप्पणी करने की कोशिश की लेकिन मैं नहीं कर सका। एकमात्र विकल्प जो मेरे पास था, वह था मैंने @jamessan
Marlon León

0

प्लगइन रिप्लेसमेंट

http://www.vim.org/scripts/script.php?script_id=2703 (2009-2014)

यह मानचित्रण का सुझाव देता है gr

  1. झटका
  2. उस पाठ का चयन करें जिसे आप बदलना चाहते हैं और दबाएं gr
  3. अगले ब्लॉक पर जाएं जिसे आप बदलना चाहते हैं

वैकल्पिक रूप से, gr<text object>इसे दृश्य चयन के बिना करने के लिए उपयोग करें। repeat.vimटिम पोप visualrepeat.vimद्वारा और इनगो करकट द्वारा प्लग इन स्थापित किए जाने पर डॉट-रिपीट का समर्थन किया जाता है।

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