Ediff에서 두 변종을 모두 사용하는 방법은 무엇입니까?


17

Ediff 인터페이스에는 +버튼이 있지만 아무것도하지 않는 것 같습니다 (누를 때 미니 버퍼는 항상 "nil"을 표시합니다).이 버튼은 결과 버퍼에서 두 변형을 사용하기위한 것이라고 생각했습니다.

어쨌든, 원래 질문은 : 버퍼 A와 B의 내용을 버퍼 C에 넣어서 Ediff가 병합 충돌을 해결하도록하려면 어떻게해야합니까 (C를 편집 할 수는 있지만 더 쉽게 할 수 있기를 바랍니다).

파일 A 가 다음과 같다고 가정하십시오 .

같은 줄

다른 라인

같은 줄

파일 B 는 다음과 같습니다.

같은 줄

다른 라인

같은 줄

AB 를 병합 결과 C 파일 을 다음과 같이 표시하려고합니다.

같은 줄

다른 라인

다른 라인

같은 줄


나는 그 질문을 완전히 이해하지는 못하지만 병합diff3 에 대한이 Ediff 매뉴얼 섹션 은 도움이 될 수 있습니다.
Tianxiang Xiong

@TianxiangXiong 나는 내가 의미하는 바의 예를 추가 할 것이다. 연결된 매뉴얼 페이지에 해당 내용이 포함되어 있지 않다고 생각합니다.
wvxvw

답변:


7

이 StackOverflow 답변을 참조하십시오 .

에서 @ killdash9 :

d를 누르면 A와 B가 모두 버퍼 C에 복사됩니다.

(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)

복제본도 StackExchange 네트워크에 있기 때문에 (따라서 사람들 이이 사이트에 접근 할 수 있으면 해당 사이트에도 연결할 수 있습니다) 코드를 복사 하지 않고 순수하게 답변에 연결하는 것을 선호 합니다 ( 교차 사이트 중복 처리에 대한 일반적인 접근 방식). 이렇게하면 원래의 답변이 개선 된 경우 다른 사이트에 오래된 사본이 떠 다니지 않습니다. 상관없이 투표권이 있습니다.
phils

StackExchange 사이트는 일반적으로 단순한 링크가 아니라 사이트 자체에 대한 답변을 선호한다는 인상을 받았습니다. 그러나 링크가 다른 StackExchange 사이트 인 경우에는 다를 수 있습니까? / shrug
Tianxiang Xiong

실제로 공식 정책이 무엇인지 모르지만 네트워크 내 링크는 네트워크 외부 링크와 다르게 취급되어야합니다. 일반적으로 링크를 사용하지 않으면 원격 소스를 사용할 수 없어도 답변에 액세스 할 수 있지만 StackExchange 네트워크의 일부만 언제든지 사용할 수는 없을 것이므로 인수가 사라질 것이라고 생각합니다. 어느 시점에서 문제는 두 개의 서로 다른 중복 질문으로 답을 나누는 것이 합리적인지 여부이며, 거의 도움이되지 않는다고 생각합니다. 어쨌든 IMO.
phils

3

편집 : StackOverflow중복 Q & A 에는이 질문에 대한 답변이 있습니다 (주석에서 Tianxiang Xiong이 지적한 바와 같이).

당신이 원하는 방식으로 원하는 결과를 얻을 수 없기 때문에 아래의 대답은 쓸모가 없습니다. 나는 정보 때문에 만 삭제 아니에요 않습니다 주고 다소 관련, 여전히 사람에게 흥미로운 정보를 증명할 수 있습니다.


개인적으로 나는 병합 버퍼를 직접 편집하지만 표준 요구 사항이있는 경우 Emacs에게 무엇을 해야하는지 가르쳐 줄 수 있습니다.

+전화 ediff-combine-diffs:

버퍼 A와 B의 N 번째 diff 영역을 결합하고 C에 조합을 배치하십시오. N은 접두사 인수입니다. nil 인 경우 현재 차이 영역을 결합하십시오. 변수의 사양에 따라 조합이 수행됩니다 ediff-combination-pattern.

이것은 :

버퍼 A와 B의 차이 영역을 결합하는 데 사용되는 패턴. 값은 (STRING1 bufspec1 STRING2 bufspec2 STRING3 bufspec3 STRING4) bufspec이 기호 A, B 또는 조상 형식의 목록이어야합니다 . 예를 들어 값이 '(STRING1 A STRING2 Ancestor STRING3 B STRING4)다음과 같은 경우 결합 된 텍스트는 다음과 같습니다.

STRING1의
변형 (A)로부터 DIFF 영역
문자열 2
조상에서 DIFF 영역
STRING3의
변형 된 B에서 DIFF 영역
STRING4

아무것도하지 않는다고 생각하면 실제로는 일반적인 충돌 마커를 사용하여 변형을 결합합니다. 즉, A 또는 B를 이미 선택한 경우 기본적으로 +원래 충돌을 복원하는 방법입니다.


ediff-combination-pattern기본 변경으로 사용 된 기존의 충돌 표시 를 제거해도 변경되지 않습니까? 병합 된 파일의 diff 조합을 ​​사용하여 충돌을 해결할 때까지 충돌을 계속 유지하고 싶습니다.
wvxvw

충돌 마커는 Emacs 외부에서 시작되었으므로 그 경우에 대해서는 의문이지만 실제로는 잘 모르겠습니다. 시도 해봐?
phils

오늘은 나중에하겠습니다. 알고 있으면 업데이트하겠습니다.
wvxvw

실제로 당신은 옳습니다-ediff는 버퍼를 제시하기 전에 해당 패턴에 따라 모든 충돌 영역을 처리하고 변환합니다. 그러나 ediff-combination-pattern사용자 정의 패턴에 바인딩 한 다음을 호출 하는 명령에 대한 사용자 정의 바인딩을 추가 할 수 있습니다 ediff-combine-diffs.
phils

2
솔루션 은 당신이 원하는 것 같습니다.
Tianxiang Xiong
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.