Vim diff tüm bloğunu değil, sadece dp veya sadece satırları nasıl yaparım?


28

Şu anda MacVim (Snapshot 64) "Diff by ..." menü seçeneğini kullanıyorum.

Dosya Django'nun settings.py1.3.1 sürümündeki sürüm 1.4 sürümünden yeni bir dosyaya ait.

Ekran görüntüsü

İki temel komut biliyorum

  1. do diğer taraftan bir bloku "almak" (ve değiştirmek) için.
  2. dp diğer tarafa bir blok koymak (ve değiştirmek).

Ancak bu iki komut, MacVim'de mor vurguların olduğu tüm bloğu yazar.

2. bloğa bakarsanız, satır 2 ve 3'ten yalnızca farklı 2 kelime olduğunu görebilirsiniz: mysiteve hobbes3. Ben sadece tüm satır yerine satır başına değiştirmek istiyorum .

Öyleyse, tüm bloğun aksine, satır başına dove dpsatır başına değiştirilecek bir komut var mı yoksa elle yazmam gerekiyor mu?

Bonus soru : Bir bloğu manuel olarak düzenlediğimde mor vurguyu kaybettiğimi farkettim. Dosyayı yeniden açmadan vurgulamaları eklemek için farklılığı tekrar nasıl "yenileyebilirim?"?

Lütfen MacVim'e özgü cevaplar yerine Vim-generalin cevaplarını tutmaya çalışın.

Yanıtlar:


30

Bunu yapmanın çeşitli yolları var.

  1. Hedef tampondaki kaynak arabellekten elde etmek istediğiniz satır aralığını seçin ve kullanın :diffget. Örneğin, görsel olarak bir satır aralığı seçip Vyazabilirsiniz :diffget.
  2. Kaynak arabellekte, hedef arabellek içine koymak ve kullanmak istediğiniz satır aralığını seçin :diffput. Örneğin, geçerli satırı diğer arabelleğe koymak için yazın :.diffput.
  3. Yank kullan ve koy. Kaynak arabellekte kopyalamak istediğiniz satır aralığını hedef ara belleğe seçin, bunları kullanarak sıralayın Y, imleci hedef ara belleğe getirin ve istediğiniz yere koymalarını isteyin pveya istemediklerinizi Psilin.
  4. Yukarıdaki gibi batırın, ancak hedef tamponda, değiştirmek istediğiniz satır aralığını görsel olarak seçin (zorunlu olarak aynı sayıda satır değil) ve yazın "0p. Her zaman en son yank metnini içeren 0 (sıfır) kayıt kullanır.

Uygun vurgulamayı göstermek için ekranı "yenilemek", yürütmek :diffupdateveya basitçe :diffu. Bazen bu yeterli olmaz ve yenilemeyi tamamlamak için imleci diğer pencereye getirmeniz gerekir.

Farklılıkları kopyalama hakkında daha fazla bilgiyi

:help copy-diffs

3

Ayrıca bir fark sırasında belirli bir anda bir satırı değiştirmek istedim. Böylece basit bir harita oluşturdum ve onları vimrc dosyama koydum.

nnoremap <silent> <leader>dp V:diffput<cr>
nnoremap <silent> <leader>dg V:diffget<cr>

Dg yerine do kullanabilirsiniz, ancak daha çok [o] yerine “diffget” düşünmeye alışkınım.

Bonusunuz için, sadece iki kez başka bir basit harita kullandım:

nnoremap <silent> <leader>df :call DiffToggle()<CR>

Şimdi, df difmodu kapatıp açacak, ben de kapatıp tekrar açacağım.

Ve bir bonus seçeneği eklemek

nmap <silent> <leader>du :wincmd w<cr>:normal u<cr>:wincmd w<cr>

Bu, diğer dosya / pencerede bir yazım hatası veya istenmeyen bir değişikliği geri almanıza olanak tanır, çünkü: sadece u geri aldığınızda yalnızca mevcut pencerede bir değişiklik yapılmaz.

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.