Swp dosyalarında kaydedilmemiş değişiklikler olup olmadığını nasıl tespit edebilirim?


11

Gvim (v.7.4.488) kullanarak kaynak kodunu düzenlerken, vcs (Ubuntu linux'daki komut satırından git 2.1.4 kullanıyorum) bazı değişiklikler yapmak istiyorum.

git --status

hangi dosyaları değiştirdiğimi gösterir. Ancak, o .*.swpanda görünür olan arabelleklerin vimini de gösterir (hem dosya kaydedilmemiş değişiklikler içeriyorsa hem de düzenlenen dosya .*.swp-file ile aynı olduğunda ). Tabii ki git, bu dosyaları yoksayabilir veya vim takas dosyalarını farklı bir konumda saklayabilir (bkz. Vim.wikia veya stackoverflow'daki bu soru ). Ama kaydedilmemiş değişiklikleri içerdiklerinde ortaya çıkan .*.swp-files'i seviyorum git --status, çünkü dosyaları içinde bulunduğumu düşündüğümden farklı bir durumda yürüttüğümü gösteriyor .

Nasıl bir yanlış pozitif önleyebilirsiniz .*.swpgösterilmesini -dosyalar git --statuskaydedilen dosya ile aynı olduğu zaman .*.swpben vim düzenleme ediyorum olanlardan daha farklı bir durumda işlemek için bu dosyayı görmek mümkün olurken, -Dosya vardır?

  • .*.swpDiskteki dosya ve vim'deki dosya farklı olduğunda yalnızca -files dosyası kullanılabilir mi?
  • Kaydedilmemiş dosyaları tespit etmenin başka bir yolu var mı?

@Elyashiv ve @ VanLaser'ın yorumlarını birleştirmek, takas dosyalarının kaydedilmemiş dosyalar içerip içermediğini tespit etmekten daha basit bir yöntemle sonuçlanır:

  1. git'in. *. sw [po] dosyalarını yoksaymasına izin vermeyin;
  2. taahhütte bulunursa git --status, herhangi bir .*.sw[po]dosya açığa çıkarsa , vi'de bir dosya :wa; ve,
  3. ekleme ve taahhüt etme.

1
:wakaydedilmemiş dosya olmadığından emin olmak için kullanabilirsiniz .
elyashiv

2
gerçekten, tüm dosyalarınızın sizden önce kaydedildiğinden emin olmak çok daha "saner" git commit...
VanLaser

Yanıtlar:


8

vim -rkomut satırında, geçerli dizindeki ve geçici dizinlerdeki tüm takas dosyaları ve kaydedilmemiş değişiklikler olup olmadığı listelenir. Şu satırı arayın modified: no/YES.

Vim'e farklı bir dizine bakmasını nasıl söyleyeceğimi bilmiyorum, bu yüzden bir takas dosyası içeren ve çalıştırılan her dizine geçmeniz gerekecek vim -r. Tüm swap dosyalarını kaydedilmemiş değişikliklerle göstermek için çıktısını ayrıştıran git statusveya kullanan find -name '.*.sw[po]'ve daha sonra vim -rher dizinde çalışan bir komut dosyası oluşturabilirsiniz .

(Bunun .*.sw[po]yerine .*.swp, bazen .swodosyalara ek olarak .swpdosyalar oluşturulduğundan , zaten takas dosyası olan .swnbir dosyayı düzenlediğinizde kullanıyorum. Varolan iki takas dosyasıyla bir dosyayı düzenlerseniz dosyalar da oluşturulabilir, ancak sanmıyorum Vahşi doğada bir tane gördüm. Eğer gerçekten paranoyaksanız, .*.sw[a-p]ya da sadece kullanabilirsiniz .*.sw?.)

Seçenek hakkında :help -r(biraz) daha fazla bilgi -rveya :help recover.txtkurtarma ve takas dosya adları hakkında daha fazla bilgi için bakın.


1
Vim'in takas dosyaları gizli dosyalardır ( .dosya adına yol açar ), böylece doğru desen olur .*.sw[a-p](patolojik durumlarda, aslında tüm yolu elde edebilirsiniz .foo.saa). Bu aynı zamanda eşleşen Flash dosyalarını da engellemelidir, çünkü bunların genellikle gizli bir dosya olacağından şüpheliyim.
jamessan

@jamessan Lider .bir mermi küresi içinde gereklidir, ancak *.swpbir argüman olarak çalışır find. Ancak liderlik .işleri kolaylaştırır. Teşekkürler!
Lithis

8
  • .*.swpDiskteki dosya ve vim'deki dosya farklı olduğunda yalnızca -files dosyası kullanılabilir mi?

Evet. Aşağıdaki snippet ( tpope'nun vimrc'sinden uyarlanmıştır ) değiştirilmediğinde bir arabellek için takas dosyasını devre dışı bırakacaktır, bu nedenle takas dosyaları yalnızca değiştirilmiş dosyalar için mevcuttur.

autocmd CursorHold,BufWritePost,BufReadPost,BufLeave *
  \ if isdirectory(expand("<amatch>:h")) | let &swapfile = &modified | endif

Uyarı : Takas dosyası yalnızca arabellek değiştirildiğinde mevcut olduğundan takas dosyasının bir tavsiye kilidi olarak kullanımını kaybedersiniz. Arabellek değiştirilmezse, başka bir Vim zaten açık olduğunu fark etmeden düzenlemeye başlayabilir. İkinci Vim, birincisi daha fazla değişiklik yapmadan önce kaydederse, kullanıcı kaydetmeye çalışana veya bir şey dosyanın değiştirilip değiştirilmediğini kontrol etmek için Vim'i tetikleyene kadar fark edilmez.

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.