Vimdiff ile değişiklikleri kopyalamanın önerilen yolu nedir?


117

Dosyaları karşılaştırırken ve bir kaynak kodu deposunu güncellerken, vimdiff'u kullanmayı seviyorum. Bir dosyadan diğerine yapılan değişiklikleri kopyalamak için genellikle bunun gibi bir anahtar sıra kullanırım: -

Shift + V (select line)
k or j; { or }; Up or down arrow keys (select more lines)
y  (copy selected lines)
Ctrl + w, left/right arrow (move to other pane)
p (paste lines)

Klavye kısayollarının ustası olan Vim, bu görevi yerine getirmenin kesinlikle daha kolay bir yolunu bulmalı. Bir tane var mı? Kaynak kodu değişikliklerini manuel olarak güncellemek için ne kullanıyorsunuz?


2
Belirsiz bir şekilde "olması gereken bu değil" anlamını anlamlı bir soruya dönüştürdüğünüz için teşekkür ederiz. Ortaya çıkan cevap uzun zaman önce öğrenmem gereken bir şeydi.
Caleb

1
Sorunuz için en iyi cevaplar burada: stackoverflow.com/questions/5288875/…
erik

Yanıtlar:


181

do(diff elde et) ve dp(diff put) ihtiyacınız olan şeydir. Bu bağlamda, diğer yardımcı normal mod komutlarının küçük bir listesi.

]c               - advance to the next block with differences
[c               - reverse search for the previous block with differences
do (diff obtain) - bring changes from the other file to the current file
dp (diff put)    - send changes from the current file to the other file
zo               - unfold/unhide text
zc               - refold/rehide text
zr               - unfold both files completely
zm               - fold both files completely

NOT:
Her iki dove dpbir blok ya da normal modda bir blok altında sadece bir hattı üzerinde değil görsel modda çalışmayabilir. Görsel modda metin satırları seçerken, normal komutları kullanmanız gerekir.

  • :'<,'>diffget ve
  • :'<,'>diffput.

Ayrıca bakınız :h copy-diffs.

:diffupdate değişiklikler için dosyaları yeniden tarar.


4
Doğru. Başlangıçta oldukça karışık buldum, çünkü bütün (bitişik) bloklar birbirine kopyalandı. Bu, fark kipinin aynı çizgileri otomatik olarak gizlemesiyle birlikte, kendimi her iki bölmede de üç kere kontrol etmeden önce, "Ne oldu?" Diye düşündüm. Dosyalardan birinin girintisini değiştirdiğinizi varsayalım; sonra her şeyin yoluna gireceğini hayal ediyorum. İnce taneli kontrol için (yani Görsel seçim), tüm komutların gerekli olduğunu :[range]diffgetve :[range]diffputgerekli olduğunu gördüm .
Alex Leach

8
Görsel modu diffgetve ile birlikte kullanabilirsiniz: visual Görsel moda diffputgirin ve bazı metin / satırları işaretleyin. ② Ardından :diffput, seçilen satırları diğer dosyaya itmek veya seçilen satırları diğer dosyadan :diffgetalmak için yazın.
erik

6
Merhaba, SADECE bir satır için "fark" (fark elde edin) eşdeğeri olup olmadığını bilen var mı? Diyelim ki farklı bir kod bloğuna (birden fazla satır) sahipseniz, bu kodların herhangi bir satırında imleçle “yapın” dır, çünkü bu kodun altındaki satır tüm kod bloğu için fark yaratacaktır --- Sadece BİR satır için fark elde etmek istiyorum. Bu çizgiyi görsel olarak her seçmek zorunda kaldığımda, ardından "diffget", biraz sıkıcı ...
wiswit

12
Geri alma komutunun yalnızca değiştirilen arabellekte çalışacağını not etmek önemlidir, bu nedenle fikrinizi kullanır dpve değiştirirseniz geri almak için diğer arabelleklere geçmeniz gerekir.
Random832

1
@wiswit: Vtüm satırı seçmek, daha sonra dodeğeri ne olursa olsun, mevcut vim'deki (8.0) belirli bir satırın üzerine kopyalamak için çalışır.
dannysauer
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.