जब मेरे पास 16 जीबी रैम है, तो 100 एमबी टेक्स्ट फ़ाइल क्यों नहीं खोल सकता?


67

मेरे पास 100MB MySQL डेटाबेस बैकअप फ़ाइल है और मुझे अपने लिनक्स बॉक्स पर विम में खोलने में परेशानी होती है जिसमें 16G RAM है।

विम सिर्फ लटका हुआ (कम से कम अनुपयोगी)। यह कुछ ऐसा है जो मुझे समझ में नहीं आता है। मेरे पास 16 जीबी रैम है, मैं एक संपादक में 100 एमबी फाइल क्यों नहीं लोड कर सकता हूं?

क्या यह विम के कारण है? मैंने सोचा कि सभी मेमोरी प्रबंधन ओएस द्वारा नियंत्रित किया जाता है।


3
ऐसी फ़ाइलों को देखने के लिए टेक्स्ट एडिटर के बजाय HEX एडिटर का उपयोग करने पर विचार करें। Vi-like इंटरफ़ेस के साथ हेक्स संपादक का एक उदाहरण होगा hexer
रुसलान

13
यह मत भूलो कि रैम वह नहीं है जो हम दशकों से स्मृति से बाहर चलाते हैं। स्मृति अब वर्चुअलाइज्ड हो गई है; इसे पृष्ठों में विभाजित किया गया है और उन पृष्ठों को डिस्क पर स्वैप किया जा सकता है। स्मृति की मात्रा एक प्रक्रिया के पते स्थान से बाहर आवंटित की गई है और रैम की खपत की मात्रा एक दूसरे के साथ बहुत कम है। जब आप मेमोरी से बाहर निकलते हैं, तो आप एड्रेस स्पेस से बाहर निकलते हैं , रैम से नहीं । यह सोचने का सबसे अच्छा तरीका है कि मेमोरी डिस्क स्थान है , प्रत्येक प्रक्रिया को उस स्थान की एक निश्चित मात्रा मिलती है, और रैम हार्डवेयर है जो आपकी डिस्क को तेज बनाता है
एरिक लिपर्ट

21
@EricLippert पारंपरिक डिस्क को छोड़कर इतने धीमे (RAM की तुलना में) हैं कि वे केवल उन वर्चुअल मेमोरी पेजों को संग्रहीत करने के लिए उपयुक्त हैं जो सक्रिय उपयोग में नहीं हैं। अगर कोई प्रक्रिया लटकी हुई है (या कम से कम अनुपयोगी है, जैसा कि ओपी इसे लगाता है) स्वैप थ्रैशिंग के कारण, यह ठीक है क्योंकि रैम वह है जो वह बाहर चला गया है।
१५:३० पर

6
@ पता स्थान से बाहर चल रहा EricLippert आज केवल 32 बिट सिस्टम पर ही प्रासंगिक है। मुझे संदेह है कि 16 जी रैम वाला उपयोगकर्ता अभी भी सामान्य 64 बिट एक के बजाय 32 बिट पीएई कर्नेल का उपयोग करेगा।
रुसलान

3
@depquid: यह एक अच्छी बात है; मेरी टिप्पणी का जोर यह है कि ओपी को यह विश्वास है कि "मैंने 100MB सामान लोड किया है, मेरे पास 16000MB RAM है, इसलिए इसलिए मेरे 16000MB RAM में से 100MB की खपत हो गई"। यह विश्वास प्रणाली पुरानी है।
एरिक लिपर्ट

जवाबों:


69

विम को कभी-कभी उन फाइलों से परेशानी होती है जिनमें असामान्य रूप से लंबी लाइनें होती हैं। यह एक टेक्स्ट एडिटर है, इसलिए इसे टेक्स्ट फाइल्स के लिए डिज़ाइन किया गया है, जो आमतौर पर अधिकतम कुछ सौ वर्णों वाली लाइन की लंबाई के साथ होती हैं।

एक डेटाबेस फ़ाइल में कई न्यूलाइन वर्ण नहीं हो सकते हैं, इसलिए यह अनुमान लगा सकता है कि एक सिंगल 100 एमबी लंबी लाइन हो सकती है। विम इससे खुश नहीं होगा, और यद्यपि यह शायद काम करेगा, फ़ाइल लोड करने में काफी लंबा समय लग सकता है।

मैंने निश्चित रूप से पाठ फ़ाइलों को विम के साथ 100 एमबी से अधिक बड़ा खोल दिया है । फ़ाइल को एक बार में सभी मेमोरी में फिट होने की आवश्यकता नहीं है (चूंकि विम जरूरत के अनुसार डिस्क में परिवर्तन स्वैप कर सकता है)।


1
मैंने बहुत लंबी लाइनों पर भी ध्यान दिया, बहुत लंबी लाइनों के बिना एक और फ़ाइल के साथ कोशिश की, एक बड़ा सुधार देखें। धन्यवाद
पूछें और जानें

11
@AskandLearn फ़ाइल प्रकार के आधार पर, यदि आप set synmaxcol=120(या कुछ अन्य उपयुक्त संख्या) आप एक प्रदर्शन वृद्धि देख सकते हैं । मैंने अतीत में इससे बड़े स्पीडअप देखे हैं।
सपि

किसी को पता है कि अगर हाल ही में neovim कांटा लंबी लाइनों बेहतर संभाल लेंगे? मुझे लगता है कि यह एक विशेष रूप से सामान्य मुद्दा नहीं है ...
हेमर

@GregHewgill यह सच है, मैंने भी इसका पालन किया है, लेकिन आपको यह कैसे पता चला?
राहुल पाटिल

56

मेरे अनुभव में विम बड़ी फाइलों पर नहीं , बल्कि लंबी लाइनों पर चलता हैबड़ी फ़ाइल की कीमत पर छोटी लाइनों काmysqldump उपयोग करने के लिए इस कमांड का उपयोग करें :

$ mysqldump --complete-insert -u -p

इसके अतिरिक्त, आप विम को खोल सकते हैं और इसे अपनी .vimrcफ़ाइल को पार्स नहीं करने या इस आदेश के साथ किसी भी प्लगइन्स को लोड करने के लिए कह सकते हैं :

$ vim -u NONE output.sql

इस तरह से लोड हो रहा है विम इस तरह से कम मेमोरी का उपयोग करेगा और कई प्लग इन के रूप में पूरी फाइल को पार्स करने के लिए विम की आवश्यकता नहीं होगी।


15

"। Vim के बिना VIM लोड करें और बड़ी फ़ाइलों के लिए प्लगइन्स (क्लीन VIM) जैसे

  gvim -u NONE -U NONE -N largefile.sql

13

यदि आप किसी बड़ी फ़ाइल को सीधे देखना चाहते हैं less, vimतो इसके बजाय का उपयोग करने का प्रयास करें । विम पहले लोड होने पर कई अलग-अलग सामानों को करने की कोशिश करता है - फ़ाइल को स्कैन करना (संभावित रूप से कई पास में), यह निर्धारित करने के लिए कि सिंटैक्स का उपयोग करने का प्रयास करने के लिए, और सिंटैक्स हाइलाइटिंग का प्रदर्शन, और फ़ाइल के ऊपर और नीचे के मॉडल की खोज करना। फिर जैसा कि आप फ़ाइल को संपादित करते हैं, विम स्वैफ़िल्स को बचा रहा है और पूर्ववत पेड़ों को रख रहा है (विम इतिहास में पूर्ववत नहीं है, प्रत्येक (?) अन्य संपादक की तरह रैखिक नहीं है), और पाठ परिवर्तन के रूप में प्रकाश डाला गया सिंटैक्स का लगातार पुनर्मूल्यांकन कर रहा है?

इसमें से कोई भी जरूरी नहीं है कि यह विशालकाय फाइलों के साथ अनुपयोगी क्यों होना चाहिए, लेकिन यह कुछ कारणों में से एक स्पष्टीकरण है कि यह क्यों है।


VIM को फ़ाइल पार्सिंग जैसे भारी ऑपरेशन करने से रोकने के लिए मेरा उत्तर देखें।
डॉटनचेन

Yup, XML और SQL जैसी चीजों पर प्रकाश डालने वाला सिंटैक्स बड़ी फ़ाइलों पर बहुत धीमा हो सकता है।
मार्सिन

9

विम फ़ाइल को केवल मेमोरी में लोड नहीं करता है। यह इसे आंतरिक संरचनाओं (लाइनों, शब्दों, आदि) में परिवर्तित करता है, आंतरिक स्क्रिप्ट भाषा का उपयोग करके वाक्यविन्यास हाइलाइट करता है, और इसी तरह; जिनमें से सभी मेमोरी (एक चरित्र के लिए एक बाइट से अधिक संपूर्ण) और सीपीयू समय का उपभोग करते हैं।


स्मृति का उपभोग करना भी मुद्दा नहीं है। सीपीयू समय लिया जा रहा है (और जब आप प्रतीक्षा करते हैं तो एक दृश्य फ्रीज), है।
को ऑर्बिट

उस CPU समय को ज्यादातर सिंटैक्स हाइलाइटिंग स्क्रिप्ट द्वारा लिया जाता है।
डेमकोरियू

हाँ मैं सहमत हूँ। मैं सिर्फ इतना कह रहा हूं कि मेमोरी का उपयोग बहुत कम होने की संभावना नहीं है (ए) एक समस्या है, या (बी) एक लंबे विलंब का कारण बनता है, जो आपके उत्तर के विपरीत है।
ऑर्बिट

आप सही हैं, मैंने अपने उत्तर को उसी के अनुसार अपडेट किया है।
डेमकोरियु

7

आप इसे बाइनरी के रूप में लोड करने का प्रयास कर सकते हैं। मुझे लगता है कि वास्तव में बड़ी, गैर-पाठ फ़ाइलों के लिए किस्मत थी

vim -b HUGEFILE

यह भी संभव है कि IIRC एक हेम संपादक के रूप में विम का उपयोग करें: http://usevim.com/2012/06/20/vim-binary-files/


4

उम्मीद है कि आपकी समस्या RAM से अधिक अस्थायी फ़ाइलों (जैसे स्वैप) के लिए VIM की आवश्यकता से अधिक है।

कई मामलों में, VIM द्वारा बनाई गई अस्थायी फाइलें उसी फ़ाइल की निर्देशिका में होती हैं जिसे आप खोल रहे हैं। यदि आपके लिए यह मामला है, तो आप वर्तमान निर्देशिका में उपलब्ध डिस्क स्थान की जांच करके सत्यापित कर सकते हैं।

सौभाग्य से, इस बारे में अच्छा प्रलेखन है कि आप VIM की अनुक्रमण / स्वैप फ़ाइलों के लिए एक अलग स्थान कैसे निर्दिष्ट कर सकते हैं:

आप स्वैप फ़ाइल को अक्षम भी कर सकते हैं


1

मैं कभी-कभी .sql पाठ प्रारूप में बड़े डेटाबेस बैकअप खोलता हूं। बहुत बड़ी फाइलें, या बहुत लंबी लाइनों वाली फाइलें अक्सर कभी-कभी विम में खुलने में लंबा समय लेती हैं। यह सिंटैक्स प्रसंस्करण और रंग हाइलाइटिंग से संबंधित हो सकता है, जैसा कि @zzapper और @demonkoryu द्वारा जवाब में उल्लेख किया गया है।

एक त्वरित वर्कअराउंड प्री-प्रोसेसिंग हाइलाइटिंग सिंटैक्स को रद्द करने के लिए फ़ाइल को लोड करने के दौरान "नियंत्रण-जी" को दबाया जा सकता है।

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