vim: iki dosyayı iki dosyaya ayır, ancak dosyanın tamamını değil mi?


14

Nagios 2'den Nagios 3'e bir sistem yükselttim ve şimdi eski ve yeni yapılandırma dosyalarındaki bazı farklılıkları karşılaştırıyorum.

Yapılandırma dosyalarında önemli değişiklikler var ve vimdiff bana çok fazla alakasız farklar gösterdiğinden ve #satırların başında yorumlarla uğraşmakta sorun yaşadığından, tüm dosyada bir fark yapmak istemiyorum .

İki farklı dosyada iki belirli bölüme fark uygulamak için vim veya vimdiff benzeri bir işlev kullanabilir miyim?

Örneğin, sadece böyle bir şeye benzeyen çizgileri farklılaştırmak istiyorum:

# Define a service to check the load on the local machine. 

define service{
    use                             local-service         ; Name of service template to use
    host_name                       localhost
    service_description             Blah Blah
    check_command                   Blah Blah
    }

Yanıtlar:


19

Kulağa istediğiniz gibi gelebilir : “İki metin bloğunda etkileşimli fark yapın”.

Her bloğu (satır aralığı) :Linediffkomutuyla belirtirsiniz (örneğin :4,10Linediff, önce görsel bir seçim yaparsınız, sonra yazın :Linediff(olarak görünür :'<,'>LineDiff)). Aralıklar aynı dosya / arabellekten veya farklı aralıklardan olabilir. İki aralık belirledikten sonra, belirtilen aralıklar için iki yeni, farklı mod tamponu (bölünmüş olarak) içeren yeni bir sekme açar. :wOrijinal aralıkları güncellemek için bu arabelleklerden herhangi birinde ve bu arabelleklerden herhangi birinde düzenleme yapabilirsiniz . İşiniz bittiğinde, :qfark tamponlarından çıkar ve :LinediffResetorijinal tamponlardaki aralık belirteçlerinden kurtulmak için.

Stackoverflow cevap Ben ilk linediff.vim öğrendim da eşleştirmeleri bir çift önerir. Bu sorudaki diğer cevaplar da özel bir çözümden ve aynı sorunu çözebilecek başka bir eklentiden bahsediyor.


6

Bunu yapmanın gerçekten kolay bir yolunu bulamadım, ancak http://www.vim.org/scripts/script.php?script_id=3075 . Bir arabellek bölgesini seçmenizi ve o bölgeyi yeni bir arabellekte açmanızı sağlar. Bu yeni arabelleği düzenleyebilirsiniz ve kapattığınızda, eklenti düzenlenen metninizi otomatik olarak orijinal dosyadan geldiği bölgeye kopyalar. Ayrıca, bir veya daha fazla dosyanın farklı bölgelerini yeni arabelleklere kopyalayabilir, ardından bu yeni arabellekleri dağıtabilirsiniz. Ben genellikle bir dosyada tanımlanan benzer fonksiyonlar arasındaki farkları kontrol etmek için eklentiyi bu şekilde kullanıyorum.

Sizin durumunuzda, Vim'de her iki dosyayı da açabilir, ardından Vilk dosyada ilgilenilen bölümü seçmek için bu düğmeyi yazabilir \nrve bu bölümü yeni bir arabelleğe kopyalamak için yazabilirsiniz . Diğer dosyadaki benzer bölüm için tekrarlayın. Sonra iki yeni tamponun her birinde yürütün :diffthis.


Teşekkür ederim! Ne \nryapacaksın?
Stefan Lasiewski

1
Eklenti <Leader>nr, <Leader>varsayılan olarak `\` olduğunda, seçilen bölgeyi yeni bir arabelleğe kopyalayan eklenti komutuyla eşleşir.
garyjohn

@garyjohn bölmeleri nasıl düzenlersiniz NrrrRgn?
dev

1
@dev: ~ / .vimrc içinde aşağıdaki iki satır NrrwRgn yapılandırması var: let g:nrrw_rgn_vert = 1ve let g:nrrw_rgn_protect = 'n'. Öncekiyle, NrrwRgn geçerli pencerenin soluna açılır. Hemen sola mı yoksa en sola mı açıldıklarını unuttum. Bununla birlikte, NrrwRgn'i artık daha iyi bir şey bularak kullanmıyorum: Linediff. Yeni bölgeleri, daha temiz ve daha kullanışlı bulduğum yeni bir sekmede açar. LInediff'i http://www.vim.org/scripts/script.php?script_id=3745veya adresinde bulabilirsiniz https://github.com/AndrewRadev/linediff.vim.
garyjohn

Çok teşekkürler @garyjohn. NrrwRgnen sol veya üst kısmı yapar, bu da bölünmeleri neredeyse yönetilemez hale getirir. Ben bile !varyantları denedim ama çok kırılgan kanıtladı (script hataları + orijinal dosyaya dönmek için temiz bir yol yok). Verecek linediff.vimben umut yapmak çok olsa bile bir deneyin NrrwRgngelecekte geliştirir.
dev

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.