Ediff'te her iki değişken nasıl kullanılır?


17

Ediff arabirimi +düğmesi var, ancak hiçbir şey yapmıyor gibi görünüyor (minibuffer her zaman bastığımda "nil" gösteriyor), bu düğmenin sonuç arabelleğindeki her iki değişkeni kullanmak için olduğunu düşündüm.

Her neyse, asıl soru şudur: Ediff'in her iki A ve B tamponundaki içeriği buffer C'ye koyarak bir birleştirme çatışmasını çözmesini nasıl sağlarım (sadece C'yi düzenleyebileceğimi biliyorum, ancak bunun daha kolay yapılabileceğini umuyorum).

Diyelim ki A dosyası şudur:

Aynı hat

Farklı çizgi

Aynı hat

dosya B ise:

Aynı hat

Başka bir satır

Aynı hat

C dosyasını , A ile B'yi birleştirmenin sonucunun şöyle görünmesini istiyorum:

Aynı hat

Farklı çizgi

Başka bir satır

Aynı hat


Soruyu tamamen anladığımdan emin değilim, ancak birleştirme ilediff3 ilgili bu Ediff manuel bölümü ve yardımcı olabilir .
Tianxiang Xiong

@TianxiangXiong Ne demek istediğime bir örnek ekleyeceğim. Bağlantılı manuel sayfanın bunu kapsadığını düşünmüyorum.
wvxvw

Yanıtlar:


7

Bu StackOverflow yanıtına bakın .

Gönderen @ killdash9 :

D tuşuna basıldığında hem A hem de B arabellek C'ye kopyalanır.

(defun ediff-copy-both-to-C ()
  (interactive)
  (ediff-copy-diff ediff-current-difference nil 'C nil
                   (concat
                    (ediff-get-region-contents ediff-current-difference 'A ediff-control-buffer)
                    (ediff-get-region-contents ediff-current-difference 'B ediff-control-buffer))))
(defun add-d-to-ediff-mode-map () (define-key ediff-mode-map "d" 'ediff-copy-both-to-C))
(add-hook 'ediff-keymap-setup-hook 'add-d-to-ediff-mode-map)

Yinelenen Stack Exchange ağda da (ve insanlar bu siteye alabilirsiniz dolayısıyla eğer sıra söz konusu birine almak mümkün olacak) Çünkü, yanayım değil (kod kopyalama, ama tamamen cevap bağlantı bir şekilde genel ) arası çiftleri işleme yaklaşımı. Bu şekilde, orijinal yanıt geliştirilirse, diğer sitelerde dolaşan eski kopyalar olmaz. Ne olursa olsun yukarı oy kullandı.
phils

StackExchange sitelerinin genellikle bir link yerine sitenin kendisinde bir cevap almayı tercih ettiği izlenimi altındaydım. Ancak, bağlantı başka bir StackExchange sitesi ise belki de farklıdır? / omuz silkme
Tianxiang Xiong

Aslında resmi politikanın ne olduğunu bilmiyorum, ama kesinlikle ağ içi bağlantıların ağ dışı bağlantılara farklı davranılması gerektiğini düşünüyorum. Bağlantıları genel olarak kullanmamak, uzak kaynak kullanılamıyor olsa bile yanıtın erişilebilir olduğu anlamına gelir, ancak StackExchange ağının yalnızca bir bölümünün herhangi bir zamanda kullanılabilir olması çok olası değildir, bu yüzden argümanın ortadan kalktığını düşünüyorum; bu noktada soru, cevapları iki farklı mükerrer soru arasında bölmenin mantıklı olup olmadığıdır ve bunun neredeyse hiç yardımcı olmadığını düşünüyorum. Her neyse, IMO.
phils

3

Düzenleme: StackOverflow'daki yinelenen Q & A (yorumlarda Tianxiang Xiong tarafından sivri out gibi) bu soruya cevap vermektedir.

Aşağıdaki cevabım işe yaramaz, çünkü istenen sonucu bu şekilde alamazsınız. Bunun bilgilerin çünkü silinmeden yalnızca değilim does vermek biraz alakalı olduğunu ve hala birine ilginç bilgiler kanıtlamak olabilir.


Şahsen sadece birleştirme arabelleğini doğrudan düzenlerim, ancak standart bir gereksiniminiz varsa Emacs'a ne yapacağınızı öğretebilirsiniz.

+çağrılar ediff-combine-diffs:

Tamponların A ve B'nin Nd fark bölgelerini birleştirin ve kombinasyonu C'ye yerleştirin. Nil ise, mevcut fark bölgelerini birleştirin. Kombinasyon, değişkenin özelliklerine göre yapılır ediff-combination-pattern.

hangisi:

A ve B arabelleklerindeki fark bölgelerini birleştirmek için kullanılacak desen Değer, (STRING1 bufspec1 STRING2 bufspec2 STRING3 bufspec3 STRING4) bufspec'in A, B veya Atası sembolü olduğu formun bir listesi olmalıdır . Örneğin, değer '(STRING1 A STRING2 Ancestor STRING3 B STRING4)o zaman birleştirilmiş metin şöyle görünür:

DİZGE1
varyantı A'dan fark bölgesi
STRING2
atadan fark bölgesi
STRING3
versiyon B ile ilgili fark bölgesi
String4

Hiçbir şey yapmadığını düşündüğünüzde, aslında normal çatışma işaretlerini kullanarak varyantları birleştirdiğini unutmayın. ie Zaten A veya B'yi seçtiyseniz, varsayılan +olarak orijinal çakışmayı geri yüklemenin bir yoludur.


ediff-combination-patternVarsayılan olarak kullanılan geleneksel çakışma işaretlerini değiştirmem gerekir mi ? Birleştirilen dosyalardan hangi diffs kombinasyonunu kullanarak çözene kadar çatışmayı bu şekilde sürdürmek istiyorum.
wvxvw

Çatışma belirteçleri Emacs'ın dışında ortaya çıkıyor, bu yüzden şüpheliyim ki, ama aslında bilmiyorum. Dene?
phils

Yapacağım, ama bugün. Bildiğimde güncelleme yapacağım.
wvxvw

Aslında, sağ-ediff, arabellekleri sunmadan önce tüm çakışma bölgelerini bu kalıba göre işler ve dönüştürür. Bununla birlikte, ediff-combination-patternözel deseninize izin veren ve sonra çağıran bir komut için özel bir ciltleme ekleyebilirsiniz ediff-combine-diffs.
phils

2
Bu çözüm istediğiniz gibi görünüyor.
Tianxiang Xiong
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.