16 GB RAM'im varken neden Vim 100 MB'lık bir metin dosyası açamıyor?


67

100 MB MySQL veritabanı yedekleme dosyasına sahibim ve 16G RAM'e sahip olan Linux kutumdaki Vim'de açmakta zorlanıyorum.

Vim sadece kilitleniyor (en azından kullanılamaz). Bu anlamadığım bir şey. 16 GB RAM'im var, neden editöre 100 MB'lık bir dosya yükleyemiyorum?

Vim yüzünden mi? Tüm bellek yönetiminin işletim sistemi tarafından yönetildiğini düşündüm.


3
Bu dosyaları görüntülemek için metin editörü yerine HEX editörü kullanmayı düşünün. Vi benzeri arayüze sahip bir hex editörü örneği olabilir hexer.
Ruslan

13
Unutmayınız ki, RAM yıllardır hafızamız tükendiğinde tükettiğimiz gibi bir şey olmadı . Bellek şimdi sanallaştırıldı; sayfalara ayrılmıştır ve bu sayfalar diske değiştirilebilir. Bir işlemin adres alanından ayrılan bellek ve tüketilen RAM miktarının birbiriyle çok az ilgisi vardır. Bellek yetersiz olduğunda , RAM yerine adres alanınız tükenir . Bunu düşünmenin en iyi yolu hafıza alanıdır , her işlem belirli bir miktar sabit alana sahip olur ve RAM diskinizi daha hızlı yapan bir donanımdır .
Eric Lippert

21
@EricLippert Geleneksel disklerin (RAM'e kıyasla) çok yavaş olması dışında, yalnızca aktif olarak kullanılmayan sanal bellek sayfalarını depolamak için uygun olmaları dışında. Bir işlem takas işleminden dolayı takılıyorsa (veya OP'nin koyduğu gibi kullanılamazsa), bunun nedeni tam olarak RAM'in tükettiği olmasıdır.
Depquid

6
Adres alanı tüken @EricLippert günümüzde sadece 32 bit sistemler için geçerlidir. 16G RAM'e sahip kullanıcının normal 64 bit bir yerine 32 bit PAE çekirdeği kullanacağından şüpheliyim.
Ruslan

3
@depquid: Bu iyi bir nokta; Benim yorumumun itici gücü OP’nin "100MB’lık şeyler yükledim, 16000MB’ım RAM var, bu yüzden 100.000’lik RAM’imin 100MB’sı tükendi" inancı gibi görünüyor. Bu inanç sistemi modası geçmiş.
Eric Lippert

Yanıtlar:


69

Vim bazen alışılmadık derecede uzun satırları olan dosyalarda sorun yaşıyor. Bu bir metin editörüdür, bu yüzden genellikle en fazla birkaç yüz karakter genişliğinde olan satır uzunluğuyla metin dosyaları için tasarlanmıştır.

Bir veritabanı dosyası çok sayıda yeni satır karakteri içermeyebilir, bu nedenle bir 100 Mb uzunluğunda tek bir satır olabilir. Vim bundan memnun olmayacak ve muhtemelen çalışmasına rağmen dosyayı yüklemek oldukça zaman alabilir.

Vim ile 100 Mb'tan daha büyük metin dosyalarını kesinlikle açtım . Dosyanın bir defada belleğe sığması bile gerekmez (çünkü Vim gerektiğinde diski değiştirebilir).


1
Ayrıca çok uzun satırları farkettim, çok uzun satırlar olmadan başka bir dosyayla denedim, büyük bir gelişme görüyorum. Thanks
Ask and Learn

11
@AskandLearn Dosya türüne bağlı olarak, set synmaxcol=120(veya başka bir uygun numara) eğer bir performans artışı görebilirsiniz . Geçmişte bundan büyük hız kazandım.
sapi

Son neovim çatalı daha uzun hatları daha iyi idare edeceğini bilen var mı? Sanırım bu çok yaygın bir sorun değil ...
Hemmer

@GregHewgill doğru, ayrıca bunu gözlemledim, ama bunu nasıl bildin?
Rahul Patil

56

Tecrübelerime göre Vim büyük dosyalarda değil, uzun satırlarda boğuluyor . Daha büyük bir dosya pahasına daha kısa satırlarmysqldump kullanmak için bu komutu kullanın :

$ mysqldump --complete-insert -u -p

Ek olarak, Vim'i açabilir ve .vimrcdosyalarınızı ayrıştırmamasını veya bu komutla herhangi bir eklenti yüklememesini isteyebilirsiniz :

$ vim -u NONE output.sql

Vim'i bu şekilde yüklemek daha az bellek kullanır ve Vim'in tüm eklentileri yaptığı gibi tüm dosyayı ayrıştırmasını gerektirmez.


15

"VIM'i .vimrc ve eklentiler olmadan yükleyin (VIM'i temizleyin), örneğin HUGE dosyaları için

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

13

Doğrudan büyük bir dosyayı görüntülemek istiyorsanız lessyerine kullanmayı deneyin vim. Vim, ilk yüklendiğinde çok fazla farklı şeyler yapmaya çalışır - hangi sözdiziminin kullanılacağını ve sözdizimi vurgulaması yaparak dosyanın üstündeki ve altındaki modellerin aranmasını sağlamak için dosyayı tarar (potansiyel olarak çoklu geçişlerde). Sonra dosyayı düzenlerken vim, takas dosyalarını kaydeder ve ağaçları geri alır (vim'deki geçmişi geri alır, her bir (?) Diğer düzenleyicide olduğu gibi doğrusal değildir) ve metin değiştikçe vurgulanan sözdizimini sürekli olarak yeniden değerlendirir.

Bunların hiçbiri, dev dosyalarda neden bu kadar kullanılamaz olması gerektiğinin bir gerekçesi değildir, ancak bunun nedenlerinin bir kısmının açıklamasıdır.


VIM'in dosya ayrıştırma gibi ağır işlemleri gerçekleştirmesini nasıl engelleyeceğime dair cevabımı görün.
dotancohen

Evet, XML ve SQL gibi şeyleri vurgulayarak sözdizimi daha büyük dosyalarda çok yavaşlayabilir.
Marcin

9

Vim, dosyayı olduğu gibi belleğe yüklemiyor. İç yapılara (satırlar, kelimeler vb.) Dönüştürür, dahili bir komut dosyası dili kullanarak sözdizimi vurgulama yapar; bunların hepsi hafıza (bir karakter için bir bayttan çok daha fazlası) ve CPU süresini tüketir.


Bellek tüketmek de sorun değil. İşlemcinin alındığı süre (ve beklerken görünür bir donma), öyle.
Orbit'teki Hafiflik Yarışları,

Bu CPU zamanı çoğunlukla sözdizimi vurgulama komut dosyası tarafından alınır.
demonkoryu

Evet katılıyorum. Sadece bellek kullanımının (a) bir sorun olması veya (b) yanıtınızın söylediğinin aksine uzun bir gecikmeye neden olma ihtimalinin çok düşük olduğunu söylüyorum.
Orbit'teki Hafiflik Yarışları

Haklısın, buna göre cevabımı güncelledim.
demonkoryu


4

Umarım sorununuz RAM'den çok VIM'lerin geçici dosyalar (takas gibi) ihtiyacı ile daha fazla yapmaktır.

Çoğu durumda, VIM tarafından oluşturulan geçici dosyalar, açmakta olduğunuz dosyanın aynı dizinindedir. Bu durum sizin için geçerliyse, geçerli dizindeki kullanılabilir disk alanını kontrol ederek doğrulama yapabilirsiniz.

Neyse ki, VIM'in indeksleme / takas dosyaları için nasıl farklı bir konum belirleyebileceğiniz konusunda iyi belgeler var:

Takas dosyasını da devre dışı bırakabilirsiniz.


1

Bazen büyük veritabanı yedeklemelerini .sql metin biçiminde açarım. Çok büyük dosyalar veya çok uzun satırlı dosyalar genellikle vim'de açmak için uzun zaman alıyor gibi görünmektedir. Bu, @zzapper ve @demonkoryu tarafından verilen cevaplarda belirtildiği gibi, sözdizimi işleme ve renk vurgulama ile ilgili olabilir.

Hızlı bir geçici çözüm, ön işleme vurgulayan sözdizimini iptal etmek için dosyanın yüklenmesi sırasında "control-G" ye basmak olabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.