मैं vi में कई लाइनें कैसे हटा सकता हूं?


129

मैंने निम्नलिखित का अनुसरण करने की कोशिश की है:

VI संपादक में चयनित पाठ को कैसे हटाएं

परंतु

5dd

देता है

E492: एडिटर कमांड नहीं: 5dd

मैंने तब कोशिश की:

5d

जो केवल एक ही लाइन को हटाता है। मैं कई लाइनें कैसे हटा सकता हूं?


2
जहां तक ​​मुझे याद है, 5dd मान्य सिंटैक्स होना चाहिए और कर्सर जिस पर है उसके साथ शुरू होने वाली 5 पंक्तियों को हटा देना चाहिए। कोई भी मौका CAPS LOCK चालू होता है और आप एक कीबोर्ड लेआउट का उपयोग करते हैं जो संख्यात्मक कुंजियों का कारण बनता है जब यह होता है?
एरिक जे।

जवाबों:


132

ऐसा लगता है जैसे आप कमांड मोड में कमांड दर्ज कर रहे हैं (उर्फ "एक्स मोड")। उस संदर्भ में :5dलाइन नंबर 5 को हटा दिया जाएगा, और कुछ नहीं। के लिए 5ddहै कि, पांच फलस्वरूप लाइनों कर्सर पर शुरू हटाने - - इरादा के रूप में काम करने के लिए सामान्य मोड में दर्ज करें और साथ आदेशों उपसर्ग नहीं है :



142

यदि आप लाइन नंबर जानते हैं तो आप कई (रेंज) लाइनें हटा सकते हैं:

:[start_line_no],[end_line_no]d

ध्यान दें: d का अर्थ है हटाना

कहाँ पे,
start_line_no वह आरंभिक पंक्ति है जिसे आप हटाना नहीं चाहते हैं और end_line_no वह अंतिम पंक्ति है जिसे आप हटाना नहीं चाहते हैं। प्रारंभ और अंत के बीच की रेखाएं, जिनमें प्रारंभ और अंत शामिल हैं, हटा दी जाएंगी।

उदाहरण के लिए:

:45,101d

45 और 101 सहित 45 और 101 के बीच की लाइनें हटा दी जाएंगी।


14
आप $फ़ाइल में अंतिम पंक्ति को भी चिह्नित करने के लिए उपयोग कर सकते हैं । इसलिए :45,$dहर पंक्ति को अंत तक 45 से हटा देगा।
freethebees

तुम भी पैटर्न का उपयोग कर सकते हैं जैसे/<\/div>/
Björn

1
यदि आप उस लेन से रेंज शुरू करना चाहते हैं जिस पर आप वर्तमान में हैं तो आप कर सकते हैं:.,[end_line_no]d
जो

15

सामान्य मोड में उपयोग के लिए सूचीबद्ध कमांड ( :कमांड मोड के लिए उपसर्ग )।
विम में परीक्षण किया गया।

लाइन राशि द्वारा:

  • संख्याdd - संख्या रेखाओं को हटा देगा । वर्तमान कर्सर स्थिति से गिनती शुरू करें (जैसे 5ddवर्तमान रेखा और इसके तहत 4 लाइनें हटा देगा => इसके तहत वर्तमान लाइन और ( संख्या -1 ) लाइनें हटाता है )
  • संख्याdk - वर्तमान लाइनों और वर्तमान रेखा से यूपी की अंकीय रेखाओं 3dkको हटा देगा (उदाहरण के लिए वर्तमान रेखा और इसके ऊपर की 3 पंक्तियों को हटा देगा => वर्तमान रेखा और इसके ऊपर की अंकों को हटा देगा )

लाइन नंबरों द्वारा:

  • dसंख्याG - वर्तमान रेखा (सम्मिलित) यूपी से लाइन संख्या संख्या (समावेशी) तकd2G लाइनों को हटा देगा (उदाहरण के लिए यदि कर्सर वर्तमान में लाइन 5 पर है, तो लाइनें 2-5 समावेशी हटा देगा)
  • dसंख्याgg - लाइनों को नष्ट करेगा वर्तमान लाइन से (सम्मिलित) लाइन नंबर करने के लिए नीचे संख्या (सम्मिलित) (जैसे अगर कर्सर लाइन 2 पर वर्तमान में हैd6gg लाइनों को नष्ट करेगा 2-6 सम्मिलित)
  • ( कमांड मोड केवल ) :num1 ,num2d - लाइन नंबर संख्या 1 (समावेशी) को हटा देगा लाइन नंबर num2 (समावेशी) के लिए डाउनलोड करें । नोट: यदि num1 num2 से अधिक है - विम के साथ प्रतिक्रिया करेगाBackwards range given, OK to swap (y/n)?

1
इससे मुझे मदद मिली क्योंकि मुझे एहसास नहीं था कि 'd' 'd' कर्सर से नीचे हटाने की कोशिश कर रहा है। मेरे पास मेरा कर्सर था जो फ़ाइल के नीचे मेरे कर्सर के ऊपर की रेखाओं को हटाने की कोशिश कर रहा था! सहायता के लिए धन्यवाद!
जोनाथन चाड फालिंग

लिनेनंबर द्वारा हटाना: ': <start>, $ d' फ़ाइल के अंत तक हटा देगा।
देवोलस

11

यदि आप एक गैर-दृश्य मोड विधि पसंद करते हैं और रेखा संख्याओं को स्वीकार करते हैं, तो मैं आपको एक और सीधा रास्ता सुझाना चाहूंगा।

उदाहरण

मैं पंक्ति 45 से 101 तक पाठ को हटाना चाहता हूं।

मेरा तरीका आपको कमांड-मोड में नीचे कमांड टाइप करने का सुझाव देता है:

45Gd101G

यह पढ़ता है:

लाइन ४५ ( 45G) पर जाएँ फिर टेक्स्ट ( d) को मौजूदा लाइन से लाइन १०१ ( 101G) तक हटा दें ।

ध्यान दें कि पर vimआप उपयोग कर सकते हैं ggकी जगह में G

@ बोनी वर्गीस के उत्तर की तुलना करें जो है:

:45,101d[enter]

उसके उत्तर से ऊपर के कमांड को 9 बार टाइपिंग की enterआवश्यकता होती है, जिसमें मेरे उत्तर के लिए 8 - 10 बार टाइपिंग की आवश्यकता होती है। इस प्रकार, मेरी विधि की गति तुलनीय है।

व्यक्तिगत रूप से, मैं अपने आप को पसंद करते हैं 45Gd101Gअधिक :45,101dहै क्योंकि मैं छड़ी की तरह vi के आदेश की वाक्य रचना करने के लिए, में यह मामला है:

+---------+----------+--------------------+
| syntax  | <motion> | <operator><motion> |
+---------+----------+--------------------+
| command |   45G    |        d101G       |
+---------+----------+--------------------+

8

d5d "पांच लाइनों" को काटता है

मैं आमतौर पर संख्या को बीच में ही फेंक देता हूं जैसे:

d7l = 7 अक्षर हटाएं


7

Escयह सुनिश्चित करने के लिए कुंजी दबाएं कि आपके संपादन मोड में नहीं हैं। हटाए जाने वाली पहली पंक्ति पर कर्सर रखें। दर्ज करें :5dd। वर्तमान लाइन, और अगली चार लाइनें हटा दी जानी चाहिए।

वैकल्पिक रूप से, यदि आपके पास लाइन नंबरिंग चालू है ...

Escयह सुनिश्चित करने के लिए कुंजी दबाएं कि आपके संपादन मोड में नहीं हैं। वह जगह दर्ज करें :#,#dजहाँ '#' को हटाने के लिए शुरुआत और समाप्ति पंक्ति संख्याएँ हैं।


मुझे नहीं लगता कि यह शुरुआत में बृहदान्त्र के साथ काम करता है।
आउटकास्ट

@PoeteMaudit वे वैध वी कमांड हैं। बृहदान्त्र vi को स्क्रीन के निचले भाग में कर्सर ले जाने और लाइन एडिटर कमांड को स्वीकार करने का कारण बनता है।
केनस्टर

5
  1. Esc डालने मोड से बाहर निकलने के लिए
  2. :1enter पंक्ति 1 पर जाएँ ('1' को उस पंक्ति से बदलें जिसमें आप रुचि रखते हैं)
  3. 5dd 5 लाइनें हटाएं (वर्तमान लाइन से)

टाइप करें (क्रमांकित लाइनों के लिए)।:set number


3

यदि आप एक विशिष्ट लाइन ट्रिगर के बाद एक सीमा हटाना चाहते हैं तो आप कुछ इस तरह का उपयोग कर सकते हैं

:g/^TMPDIR/ :.,+11d

की हर मुठभेड़ के बाद 11 लाइनों (समावेशी) को हटा देता है ^TMPDIR


0

यह dxd है, ddx नहीं

यदि आप 5 लाइनों को हटाना चाहते हैं, तो पहली पंक्ति की शुरुआत में कर्सर को हटाएं और d5d करें


0

सभी लाइनों के उपयोग को हटाने के लिए - ESC gg dG कुछ पंक्तियों को हटाने के लिए 5 कहते हैं तो ESC 5dd का उपयोग करें


-1

यह निम्नलिखित के रूप में किया जा सकता है ..

  1. उस स्थान पर कर्सर रखें जिसे आप हटाना चाहते हैं।
  2. दृश्य चयन शुरू करने के लिए "v" दबाएं।
  3. तीर को उस कुंजी पर ले जाएं जिसे आप तीर कुंजी का उपयोग करके हटाना चाहते हैं।
  4. प्रेस "डी" जो लाइनों को हटा देगा।
  5. अब ": x!"
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.