vimdiff를 사용하여 변경 사항을 복사하는 권장 방법은 무엇입니까?


117

파일을 비교하고 소스 코드 저장소를 업데이트 할 때 vimdiff를 사용하고 싶습니다. 한 파일에서 다른 파일로 변경 사항을 복사하려면 일반적으로 다음과 같은 키 시퀀스를 사용합니다.

Shift + V (select line)
k or j; { or }; Up or down arrow keys (select more lines)
y  (copy selected lines)
Ctrl + w, left/right arrow (move to other pane)
p (paste lines)

바로 가기 키의 마스터 인 Vim은 반드시 동일한 작업을보다 쉽게 ​​수행 할 수 있어야합니다. 하나 있습니까? 소스 코드 변경 사항을 수동으로 업데이트하는 데 사용하는 것은 무엇입니까?


2
의미있는 질문에 "모호한 것이 아닙니다"라는 애매 모호한 의견을 보내 주셔서 감사합니다. 그 해답은 오래 전에 배웠던 것입니다.
Caleb

1
귀하의 질문에 가장 적합한 답변은 다음과 같습니다. stackoverflow.com/questions/5288875/…
erik

답변:


181

do(diff get)과 dp(diff put)이 필요합니다. 다음은이 문맥에서 유용한 다른 일반 모드 명령 목록입니다.

]c               - advance to the next block with differences
[c               - reverse search for the previous block with differences
do (diff obtain) - bring changes from the other file to the current file
dp (diff put)    - send changes from the current file to the other file
zo               - unfold/unhide text
zc               - refold/rehide text
zr               - unfold both files completely
zm               - fold both files completely

참고 :
모두를 do하고 dp당신이 블록 또는 일반 모드에서 블록에서 한 라인에 있지만없는 시각적 모드에서 경우에 작동합니다. 비주얼 모드에서 텍스트 줄을 선택할 때 일반 명령을 사용해야합니다

  • :'<,'>diffget
  • :'<,'>diffput.

도 참조하십시오 :h copy-diffs.

:diffupdate 변경 사항을 파일에서 다시 스캔합니다.


4
참된. 전체 (연속적인) 블록이 복사되므로 처음에는 혼란 스럽습니다. 즉, diff 모드의 동일한 줄 자동 숨기기와 함께 두 창에서 각각의 움직임을 세 번 확인하기 전에 "도대체 무슨 일이 있었습니까?" 파일 중 하나의 들여 쓰기를 변경했다고 가정하십시오. 모든 것이 가로 질러 움직일 것입니다. 세분화 된 제어 (예 : 비주얼 선택)의 경우, 전체 명령 것을 발견 :[range]diffget하고이 :[range]diffput필요하다.
Alex Leach

8
다음 diffget과 함께 시각 모드를 사용할 수 있습니다 diffput. ① 시각 모드로 들어가서 일부 텍스트 / 라인을 표시합니다. ② 그런 다음 입력 :diffput하여 선택한 줄을 다른 파일로 푸시하거나 선택한 파일을 다른 파일 :diffget에서 가져옵니다.
erik

6
안녕하세요, 그냥 한 줄에 "do"(동일한 차이)가 있는지 아는 사람이 있습니까? 다른 코드 블록 (한 줄 이상)을 가지고 있다고 가정 해 봅시다.이 코드의 한 줄에 커서를두고이 코드의 한 줄에 커서를두고 "do"를 수행하면 전체 코드 블록에 대해 차이가 생깁니다. 한 줄의 차이를 얻고 싶습니다. 이 라인을 시각적으로 선택해야 할 때마다 약간의 지루한 "diffget"이
나옵니다

12
실행 취소 명령은 변경된 버퍼에서만 작동하므로 dp마음 을 사용 하고 변경하는 경우 다른 버퍼로 전환하여 실행 취소해야합니다.
Random832

1
@wiswit : V전체 줄을 선택한 다음 do현재 vim (8.0)의 특정 줄을 가치가있는 곳으로 복사합니다.
dannysauer
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.