2009-08-10 11 views
20

vim में जब मेरी कर्सर पहली पंक्ति पर है मैं दबा सकते हैं:विम में, मैं पिछले 100 लाइनों को छोड़कर फ़ाइल में सभी लाइनों को कैसे हटा सकता हूं?

100dd

पहले 100 लाइनों को हटाने के लिए।

लेकिन मैं कैसे नष्ट कर सकता हूं सभी लाइनों छोड़कर पिछले 100 लाइनों?

उत्तर

52

सामान्य मोड में:

G100kdgg 

दूसरे शब्दों में:

:1,$-100d 

स्पष्टीकरण::

G  -> go to last line 
100k -> go up 100 lines 
dgg -> delete to top of file 
+0

सरल और सुरुचिपूर्ण। मुझें यह पसंद है! – technomalogical

+0

यदि बफर में 100 से कम लाइनें हैं तो यह काम नहीं करता है। यह सभी लाइनों को गलत तरीके से हटा देगा क्योंकि '100k' भाग का कोई प्रभाव नहीं पड़ेगा। –

+1

@ डॉनक्रिकशैंक गलत, अगर 100 से कम लाइनें हैं, तो '100k' पहली पंक्ति में जाएगी और' dgg' उस पंक्ति को हटा देगा। 'k' को' 100' बार दोहराया जा रहा है, इसलिए यदि केवल 5 लाइनें हैं तो यह बफर के शीर्ष पर "टक्कर" रखेगी और फिर रुक जाएगी। यह सभी कार्यों को करने से पहले पूर्व-जांच नहीं करता है। उस ने कहा, हाँ, अगर आपके पास बफर में 100 या कम लाइनें हैं तो यह गलत तरीके से 1 लाइन को हटा देगी। लेकिन आईएमओ, यह अन्य अति उत्साहित उत्तर की तुलना में विम का अधिक मूर्खतापूर्ण उपयोग है: यह एक और अधिक गूढ़ व्यक्ति की बजाय एकाधिक आदेशों की "वाक्य" है। – Izkata

49

पूर्व मोड में ":" "पूर्व मोड" में संपादक डालता है । पूर्व मोड की डी कमांड लाइनों को हटा देती है, जो एक पंक्ति संख्या या रेखाओं की एक श्रृंखला के रूप में निर्दिष्ट होती है। $ अंतिम पंक्ति है, और अंकगणितीय रेखा संख्याओं पर लागू किया जा सकता है।

+3

एफडब्ल्यूआईडब्ल्यू यह बेहतर जवाब है, आईएमएचओ –

11

एक वैकल्पिक सामान्य प्रयोजन समाधान:

:%!tail -100 

आप ! के बाद किसी भी शेल कमांड उपयोग अनियंत्रित रूप से वर्तमान बफर संशोधित करने के लिए कर सकते हैं। विम कमांड शुरू करता है और वर्तमान फ़ाइल को stdin पर फ़ीड करता है, और stdout से नया बफर पढ़ता है।

संबंधित मुद्दे