diff - 삽입된 줄과 다른 부분에 변경된 줄을 표시합니다.

diff - 삽입된 줄과 다른 부분에 변경된 줄을 표시합니다.

(diff의 출력에 의존하고 해석하는 vimdiff를 사용하여 이 문제에 부딪혔기 때문에 diff 문제라고 생각합니다.)

이러한 파일이 주어지면 첫 번째 파일은 2줄, 두 번째 파일은 4줄로 diff(GNU 3.3)는 전체 파일을 표시합니다.

< 09/02/2014 | CFCU Checking          | PAYPAL |      12.99 |            | 12.99
< 09/03/2014 | CFCU Checking          | PAYPAL |      24.45 |            | 37.44
---
> 09/02/2014 | Expenses : Advertising | Closed |            |      12.99 | 12.99
> 09/02/2014 | CFCU Checking          | PAYPAL |      12.99 |            | 0.00
> 09/03/2014 | Expenses : Advertising | Closed |            |      24.45 | 24.45
> 09/03/2014 | CFCU Checking          | PAYPAL |      24.45 |            | 0.00

이로 인해 vimdiff는 공유된 콘텐츠가 거의 없다고 생각하게 됩니다. 아래 이미지 상단과 같이 1행의 처음 13자, 2행의 처음 4자를 일치시키고 3행과 4행을 신규로 처리합니다.

이 경우 diff(따라서 vimdiff)가 아래 이미지의 중앙에 표시하도록 삽입된 줄 대신 개행 문자를 추가하는 데 많은 시간을 소비했습니다.

vimdiff가 이 부분을 이미지의 아래쪽으로 처리하도록 diff에서 이를 더 잘 분리할 수 있는 방법이 있나요? (저는 포토샵으로 했습니다.)

위에 표시된 것처럼 1개가 아닌 4개의 부품이 필요합니다. 그것은 다음과 같습니다:

#,#c#,#
---
> 09/02/2014 | Expenses : Advertising | Closed |            |      12.99 | 12.99
#,#c#,#
< 09/02/2014 | CFCU Checking          | PAYPAL |      12.99 |            | 12.99
---
> 09/02/2014 | CFCU Checking          | PAYPAL |      12.99 |            | 0.00
#,#c#,#
---
> 09/03/2014 | Expenses : Advertising | Closed |            |      24.45 | 24.45
#,#c#,#
< 09/03/2014 | CFCU Checking          | PAYPAL |      24.45 |            | 37.44
---
> 09/03/2014 | CFCU Checking          | PAYPAL |      24.45 |            | 0.00

참고로, vimdiff는 다양한 diff 옵션과 함께 사용할 수 있지만 diffexpr기본 ed스타일 diff가 필요합니다.

그래서 diff가 같은 섹션에서 변경된 행과 삽입된 행을 혼합하지 않도록 하는 방법을 찾고 있는 것 같습니다.

vimdiff 예

답변1

종종 효과가 있는 한 가지 접근 방식은 다음을 추가하는 것입니다.문맥, 작은 인접 차이가 보다 응집력 있는 디스플레이로 수집됩니다.

  • 명령줄에서diff, 이 -C옵션을 사용하여 이를 수행할 수 있습니다.
  • 그리고vimdiff,당신은 그것을 사용할 수 있습니다diffopt예를 들어 설정 및 context기능은 암시적 기본값입니다.
    diffopt=padding 설정, 컨텍스트: 6

예를 들어 변경할 수 있습니다.

    diffopt+= 컨텍스트 설정:9
    diffopt=padding 설정, 컨텍스트: 9

게다가:

  • 기본 diff유틸리티에는 줄이 서로 바뀌었는지 여부를 감지할 방법이 없습니다.
  • 또한 특정 열을 무시하면서 파일을 비교할 방법도 없습니다.

주어진 예는 날짜별로 정렬된 일련의 거래로 보입니다. 다른 정렬(변경되지 않은 행의 더 큰 블록을 생성하는 경향이 있음)이 있는 경우 데이터를 다시 정렬하는 것이 도움이 될 수 있습니다.

원칙적으로 귀하는할 수 있다사용diffexpr특정 열만 비교되도록 데이터를 전/후 처리하는 스크립트를 설정하고 작성합니다. 그 방법을 사용했어요곧 돌아오세요자유 형식(글꼴 수준) 비교를 위한 유틸리티입니다. 그러나 이렇게 하려면 상당한 작업이 필요하며 diff는 입력 열을 무시할 수 없기 때문에 사소한 일이 아닙니다.

관련 정보