2011-04-25 3 views
5

나는 상당히 복잡한 스크립트를 만들고 있습니다. 거의 동일한 코드를 가진 여러 섹션이 있다고 의심됩니다. vim에서 파일을 열고 버퍼에 두 개 (또는 그 이상)의 윈도우를두고, 같은 파일에 윈도우의 내용을 비교할 수 있습니까? vimdiff는 두 파일에서만 작동하는 것 같습니다. 파일의 복사본을 만들고 두 버전을 vimdiff하려고하면 diff 원점이 파일 시작 부분에 잠긴 상태로 유지됩니다. 스크롤을 풀고 창을 잠그고 창을 파일의 일부로 옮겨서 차이점을 비교하고 싶지만 표시되지 않습니다. 어떤 힌트 또는 팁? 다른 파일과 비교하고 vimdiff를 적용하려는 섹션을 잘라내어 붙여 넣을 수는 있지만 분리 된 파일을 함께 패치하려고 할 때 어디에서 왔는지를 놓칠 위험이 있습니다. 더 간단한 파일이어야합니다. , 쉬운 방법.vim의 diff-ing 윈도우

답변

2

것은 나는 보통 사본

:%w %.alt 
:vert diffsplit %.alt 

에 diff를하면됩니다 그리고 의사와 일치하는 비트가 정렬 얻을 수 있도록 다음 '고도'버전을 재 배열 happiliy 무엇. (아마도) 자식 서브 파일을 검출 할 수 있어야 깔끔한 병합/DIFF-암소 능력을 포함


참고 블록 변경 옮겼다.

실제로 연습에 넣지는 않았지만, vim을위한 멋진 자식 플러그인 fugitive을 사용하면이 마력을 좀 더 쉽게 활용할 수 있습니다. 참고 : 완전히이 가능한을되기 전에 scriptinh을 필요로 할 것으로 예상, 그러나 나는 아직도이 아이디어를 공유하는 좋은 것이라고 생각

+0

좋아, %를 사용하여 현재 버퍼의 파일 이름을 참조하는 것이 좋습니다, 나는 그것을 인식하지 못했습니다! 하지만 알 맞은 버전을 재정렬하는 방법에 대해서는 여전히 확신이 없기 때문에 일치하는 비트가 정렬됩니다. : noscrollbind가 도움이되는 것 같지만, 어떻게 두 개의 창 사이의 차이점을 강조하기 위해 정력을 얻을 수 있습니까? – ChrisDR

+0

말 그대로 재 배열을 의미합니다 (C/C#를 사용하므로'd2] M은 두 개의 메소드를 삭제하고 삽입 점 'P'와 voila로 이동합니다). 또한 '오른쪽 alt 버전'은 'alt 버전'의 오타였습니다. 나는 이것이 여전히 육체 노동이라는 것을 알고있다. (Git의 copy/move detection을 사용하는 아이디어와는 별개로) 나는 더 좋은 방법을 안다. 임시 복사본을 사용하는 트릭은 깔끔합니다. – sehe

1

를 다른 방법으로 (당신이 처음에 도착하면 아마도 스크립트를 공유 할 수 있습니다!) 내가 가끔씩 사용해 왔던 솔루션과 제 생각에 매우 잘 작동하는 솔루션은 linediff.vim입니다.

비주얼 모드를 사용하여 임의의 버퍼에서 두 개의 본문을 선택하거나 해당 내용에 대해 vimdiff를 실행할 수 있습니다. 이 기능을 사용하면 임시 diff 버퍼를 편집하고 저장할 때 저장하지 않고 변경 사항을 적용하여 원래 버퍼를 업데이트 할 수 있습니다.

내 사용 사례 중 하나는 스크립트 리팩토링 및 재정렬과 관련된 병합 문제를 해결할 때 사용하는 경우 중 하나입니다. 여기서 함수가 이동되어 수정되었을 수 있습니다. 두 조상 중 어느 쪽에서도 들어오는 변경 사항을 잃지 않으려면 시각적으로 선택하고 linediff 명령을 실행하여 두 가지 버전의 함수를 단독으로 비교하십시오.