Bir .swp dosyasına sahip bir dosyayı açarken uyarılardan nasıl kurtulurum?


44

.Swp dosyası olan bir dosyayı açtığımda sinir bozucu uyarılardan nasıl kurtulabilirim? Veya .swp dosyalarını nasıl üretemiyorum? Örnek uyarı:

E325: ATTENTION
Found a swap file by the name ".notes.swp"
          owned by: james   dated: Fri Dec  3 17:38:07 2010
         file name: ~james/school/se/project-dir/rottencucumber/doc/notes
          modified: no
         user name: james   host name: james-laptop
        process ID: 2251 (still running)
While opening file "notes"
             dated: Fri Dec  3 18:46:10 2010
      NEWER than swap file!

(1) Another program may be editing the same file.
    If this is the case, be careful not to end up with two
    different instances of the same file when making changes.
    Quit, or continue with caution.

(2) An edit session for this file crashed.
    If this is the case, use ":recover" or "vim -r notes"
    to recover the changes (see ":help recovery").
    If you did this already, delete the swap file ".notes.swp"
    to avoid this message.

Swap file ".notes.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:

Yanıtlar:


42

Bu mesaj, potansiyel olarak kaydetmediğiniz metinleri kaybetmemeyi umursanız oldukça önemlidir . O gerektiğini değil can sıkıcı düşünülmelidir ve gerektiği değil aceleyle takas dosyası veya yapılandırmak silmek neden vimonsuz çalıştırmak için.

Herhangi bir dosya düzenleme ile vimilgili bir takas dosyası olacak düzenleme yaparken , vimkullandığı değişiklikleri izlemek için. Bir dosyayı düzenlemeyi bıraktığınızda vim, karşılık gelen takas dosyasını otomatik olarak atar. Bu nedenle, bir takas dosyasının mevcudiyeti ve orijinal dosyaya yazma girişiminiz dikkate alınmalı ve uygun işlem yapılmalıdır.

( E325: ATTENTION Found a swap file) Mesajında ​​sunulan iki senaryo aslında oldukça yaygındır: (1) başka bir vimprogram düzenlemeye çalıştığınız dosyayı düzenliyor (aslında başka bir kişi olabilir - bu durumda gerçekten mantıklı olmaz) takas dosyasını sadece kör bir şekilde silmek için - veya başka bir terminal penceresinde veya sekmesinde olabilirsiniz), veya (2) önceki bir vimoturum kilitlendi (çoğunlukla uzaktan düzenleme yaparken bu olur ve ağ oturumu kesilir) Vim oturumu normal bir şekilde çıkılmadıysa ve .swpdosya geride kalıyorsa, bu ikinci senaryonun bir başka örneği, aktif olarak veya arka plana sahip bir vimoturumu olan terminal penceresini veya sekmesini yanlışlıkla kapatmış olmanızdır ).

Bu mesajla karşılaştığımda, ilk önce normalde her biri birkaç sekme içeren birkaç terminal penceresiyle çalıştığım için bu dosyayı başka bir terminal penceresinde veya sekmesinde düzenlediğimi düşünüyorum:

görüntü tanımını buraya girin

Başka bir yerde düzenlediğimi fark edersem ve ona geri dönebilirsem , bu ek oturumun qanahtarına basın (Q)uitve orijinal vimoturum aracılığıyla düzenlemeye döndüm .

Bazen tam olarak emin değilseniz, ben (Q)uitve sonra aynı terminalde jobsçalışıp çalışmadığımı doğrulamak için koşarım vim; Hiçbir şey çıkmazsa, başka bir yerde ps -ef | grep vimçalışıp çalışmadığımı kontrol etmek için koşarım vim(başka bir terminal penceresinde veya sekmesinde). Mesele şu ki, her zaman orijinal vimoturum aracılığıyla düzenlemeye devam etmeye çalışıyorum .


Ben orijinal düzenleme oturumuna döndüremez eminim ve ben hala aşağıdaki seçenekler sunulur am, o zaman basın riçin (R)ecover.

Swap file ".notes.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (Q)uit, (A)bort:

Tuşuna basarak r, şöyle bir mesaj göreceksiniz:

Swap file ".notes.swp" already exists!
"notes" 18L, 46C
Using swap file ".notes.swp"
Original file "/private/tmp/notes"
Recovery completed. Buffer contents equals file contents.
You may want to delete the .swp file now.

Press ENTER or type command to continue

Eğer, diğer taraftan, ben artık ben kabuğunda istemi çünkü, o zaman koşmak, bu seçeneklerden ile karşı karşıya am vimile -raşağıdaki gibi, seçenek:

vim -r notes

Elde edilen mesaj benzer olacaktır:

Using swap file ".notes.swp"
Original file "/private/tmp/notes"
Recovery completed. Buffer contents equals file contents.
You may want to delete the .swp file now.

Press ENTER or type command to continue

Her iki durumda ENTERda devam etmek için düğmesine basın , dosyanızı göreceksiniz.

Not: Vim, bulduklarından şüpheleniyorsa, bir hata mesajı verecek ve "???" ile satır ekleyecektir. Metinde. Kurtarma sırasında bir hata mesajı görürseniz, dosyada "???" için arama yapın. Neyin yanlış olduğunu görmek için. İhtiyacınız olan metni almak için kesmek ve yapıştırmak isteyebilirsiniz.

En yaygın açıklama "??? LINES MISSING" dır. Bu, Vim'in metni orijinal dosyadan okuyamadığı anlamına gelir. Bu, sistem çöktü ve orijinal dosyanın parçaları kaydedilmediyse olabilir.

Bununla birlikte, bu ???izleri hiç görmedim , bu yüzden bu gerçekten nadir görülen bir durum olmalı .


Daha sonra, içeriği başka bir dosyaya kaydedin (yani yazın) (genellikle orijinal dosya adının sonuna "2" eklerim):

:w notes2

Sonra, bu vimoturumu zorla kapat:

:q!

Ardından, iki dosyayı karşılaştırın:

diff notes notes2

Eğer diffhiçbir şey döndürmezse , bu hiçbir fark olmadığı anlamına gelir ve hem takas dosyası hem de ikinci dosyayı kaldırmak güvenlidir:

rm .notes.swp notes2

Bu noktada, orijinal dosyayı açın ve daha önce hiç sorun olmamış gibi devam edin:

vim notes

Bir diffşey döndürürse , bu, orijinal dosyanın (takas dosyası aracılığıyla) kurtarma işlemi sayesinde ikinci dosyaya kaydedilmiş olduğu anlamına gelir.

Bu değişiklikler ikinci dosyada yakalandığından, takas dosyasını silmek ve ikincisiyle orijinal dosyanın üzerine yazmak güvenlidir:

rm .notes.swp
remove .notes.swp? y

mv notes2 notes
overwrite notes? (y/n [n]) y

Bu noktada, orijinal dosyayı açın ve daha önce hiç sorun olmamış gibi devam edin:

vim notes

Bu çok iş gibi görünüyor, ancak bir kez iş akışına alışınca en fazla 20 saniye sürüyor.


2
Bunun kabul edilen cevap olmadığına inanamıyorum. Mükemmel. +1
David,

kabul edilen cevaptan çok daha iyi. Keşke bunu çözmenin bir yolu olsaydı!
Michael Durrant

1
Her zaman mesajın yararlı olduğu durum değildir. Bir dosyayı düzenliyorsam , düzenlemeye başladığımdan beri dosyanın değişip değişmediğini , şu anda başka bir vim penceresinde de düzenleyip düzenlemememeyi değil, kaydetmeyi denediğimden eminim. Bir dosyayı iki terminalde açmam çok iyi, çünkü dosyaya kaydetme işlemi araya girmiyorsa. Vim'in kurtarmaya çalıştığım zaman beni gerçekten dürtmesi gerekiyor, açarken değil.
Ken Simon

Ne yazık ki bu soruyu cevaplamıyor, sadece nag ekranını görmezden gelmemem gerektiğini söylüyor. MY senaryosu, dosyayı zaten vim'de açtım (düzenleme için, belki), dosyanın farklı kısımlarını aynı anda yan yana görmek istiyorum ve clang_complete arabellekleri yeniden boyutlandırmaya devam ettiğinden ayrık arabellek istemiyorum. . Bu durumda, aslında Vim'de bir dosyayı nasıl salt okunur açacağımı ve takas dosyasını görmezden gelmesini istiyorum.
Lelanthran

@Lelanthranvim -n file_name
user664833

19

Yapıştırılan mesaj, başka bir Vim oturumunda hala "notlar" dosyasının açık olduğunu gösteriyor. Başka bir yerde düzenlenmekte olan bir dosyayı düzenlemek kesinlikle iyi bir fikir değildir.

Eğer bu mesaj yanlışsa, Vim oturumunuzun uygun olmayan şekilde nasıl çıktığını belirlemeniz ve gelecekte bundan kaçınmanız gerekir.

Kurtarmaya gelince, "notlar" onunla ilişkili Vim .swp dosyasından daha yeni olduğundan, bu durumda bir sorun olabilir, ancak yine de deneyebilirsiniz. Yalnızca "notları" dosyanızı önce bir yedekleme konumuna kopyaladığınızdan emin olun.

" :help recover.txt" Hakkında okumak iyi bir fikirdir .

Buradaki ders, bu mesajı görmemeniz gerektiği ve bir yere yanlış giden bir şey olduğunuz anlamına gelir. Bu (muhtemelen) Vim'in hatası değil.

Bu noktada, Vim'in .swp dosyaları oluşturmasına izin vermemek konusunda hala kararlıysanız, çökmelerden ve diğer ilgili sorunlardan kurtulabilirsiniz, " set noswapfile" koyabilirsiniz ~/.vimrc.


1
DİKKATLİ OL! VIM ile uğraştığım bütün işimi neredeyse kaybediyordum. Bir şey denemeden önce kodunuzu kopyalayın.
Squirrl

Şiddetle okuyucular (user664833 tarafından cevap gözden önermek Bu mesaj ... aslında oldukça önemlidir ) Ben çok daha iyi informatgion ve tavsiyede düşünüyorum Bu cevap imho
Michael Durrant

11

Takas alanını kullanmadan vim'i açmak için -n komutunu kullanabilirsiniz :

Bunu her zaman yapmak için, sadece koymak

alias vim='vim -n' 

.bashrc veya .bash_aliases dosyanızda

-n seçeneği olmadan vim'i çalıştırmanız gerekirse, yalnızca

\vim

3
Her zaman bir swapfile olmadan çalışmasını tavsiye etmem, ama "-n" aslında tam da ihtiyacım olan şeydi. Normalde bir takas dosyası kullanıyorum. Bununla birlikte, Vim'i bir diff aracı olarak kullanırken, düzenlemekte olduğum dosyaların farklılıklarını bu mesajı veren veya takas dosyamla etkileşime girmeden görüntülemek istiyorum.
Agentlien

1
Bu cevabı seviyorum - kısa, doğru ve gerçek soruya cevap veriyor!
Lelanthran


1

.Swp dosyası olan bir dosyayı açtığımda sinir bozucu uyarılardan nasıl kurtulabilirim?

Şuradaki kısa mesaj seçeneğini kullanın ~/.vimrc:

set shortmess=A

POSIX modunu çalıştırırken de varsayılan olan budur.

Ancak bunu yapmayın : yakıt verimliliğini artırmak için arabanızın hava yastığını sökmek gibidir. Uzun vadede, soruyu yanıtladığınızdan daha fazla zaman kazanırsınız.


1
Tek kullanıcılı bir sistem varsayalım, bu bir yapılandırma için korkunç değil. Çok fazla sayıda terminal sekmesinin açılmasını seviyorum ve bazen başka bir sekmeye gömdüğüm bir dosyayı düzenlemek istiyorum. Birkaç hızlı düzenleme yapmak istersem sorun değil. Geri diğer vim penceresinde kendimi bulmak, güzellik beni uyarmak edeceksiniz sonra dosya o kurtardı I önce değişti ve ben hızlı yapabilirsiniz :e(hızlı dahil olanlardan görmek uiçin geri alma arkasına ne Tamponun içindeydim.) Ben zaten açık bir dosya olması konusunda dürtüklenmekten daha çok hoşlanıyorum.
Ken Simon

1

Bu benim terminalim beklenmedik bir şekilde vi open ile bağlantımı kapattığımda oldu.

Neyse ki hiçbir değişiklik yapmadım.

Bu uyarıyı kaldırmak ve takas atmak için:

  1. Baktığınız işlem kimliğini bulun,process ID: 2251 (still running) bu durumda 2251
  2. Doğru kimliği aldığınızı doğrulayınps 2251
  3. Kullanarak işlemi öldürkill 2251

Ve bu kadar.

Takas dosyalarının sizi korumak için orada olduklarını ve bunları tamamen devre dışı bırakmamanız gerektiğini unutmayın.


Peki ya vi(m)süreç yoksa ?
Scott

-2

Bu sorunu üç basit adımda çözdüm:

1 :) Aynı yerde .swp dosyasını görüntüleyebilmeniz için dosyanın bulunduğu yerde "ls -la" komutunu çalıştırın.

2 :) Şimdi "rm -i * .swp" yani ".swp" dosyasını dizinden kaldırın.

3 :) Şimdi ".swp" dosyasının kaldırılıp kaldırılmadığını onaylayın.

4 :) Şimdi bu uyarıların tadını çıkarın.


3
Neden dünyada rm -rfbir dosyayı kaldırmayı önerdin? -rfDaha mantıklı bir hale geldim-i
Nifle
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.