Vim diff의 전체 블록이 아닌 어떻게 dp 만하거나 선만 수행합니까?


28

현재 MacVim (Snapshot 64) "분할 분할 ..."메뉴 옵션을 사용하고 있습니다.

파일은 settings.py버전 1.3.1 의 Django 파일이며 버전 1.4의 새로운 파일입니다.

스크린 샷

두 가지 기본 명령을 알고 있습니다

  1. do 다른 쪽에서 블록을 "얻고"교체합니다.
  2. dp 블록을 다른쪽에 "넣고"교체합니다.

그러나이 두 명령은 전체 블록을 작성합니다. MacVim에서는 자주색 하이라이트입니다.

당신이 두번째 블록에서 보면, 2 호선에서 것을 볼 수 있으며, 3 만 다른 두 단어를 가지고 mysitehobbes3. 전체 블록이 아닌 라인 당 교체하고 싶습니다 .

전체 블록이 아닌 do dodpline 을 바꾸는 명령이 있습니까? 아니면 수동으로 입력해야합니까?

보너스 질문 : 블록을 수동으로 편집하면 자주색 강조 표시가 사라집니다. 파일을 다시 열지 않고 하이라이트를 포함하도록 diff를 "새로 고침"하는 방법은 무엇입니까?

MacVim과 달리 Vim-general의 답변을 유지하십시오.

답변:


30

이를 수행하는 방법에는 여러 가지가 있습니다.

  1. 소스 버퍼에서 가져 오려는 대상 버퍼의 라인 범위를 선택하고 사용하십시오 :diffget. 예를 들어을 사용하여 행 범위를 시각적으로 선택한 V다음을 입력 할 수 :diffget있습니다.
  2. 소스 버퍼에서 대상 버퍼에 넣고 자하는 라인 범위를 선택하고를 사용하십시오 :diffput. 예를 들어, 현재 행을 다른 버퍼에 넣으려면을 입력하십시오 :.diffput.
  3. yank를 사용하여 넣습니다. 사용을 꺼낼, 대상 버퍼에 복사하려는 소스 버퍼 라인의 범위를 선택 Y, 대상 버퍼로 커서를 이동하고 당신이 원하는 위치에 넣어 p또는 P당신이 원하지 않는 행을 삭제.
  4. 위와 같이 Yank하지만 대상 버퍼에서 바꿀 줄 범위를 반드시 시각적으로 선택하고 (같은 줄 수는 아님) 유형을 입력하십시오 "0p. 항상 가장 최근의 yank 텍스트를 포함하는 0 (제로) 레지스터를 사용합니다.

적절한 강조 표시 실행 표시를 '새로 고침' :diffupdate또는 단순히 :diffu. 때로는 충분하지 않으므로 커서를 다른 창으로 이동하여 새로 고침을 완료해야합니다.

diff 복사에 대한 자세한 내용은

:help copy-diffs

3

또한 diff 중에 주어진 순간에 한 줄을 수정하고 싶었습니다. 그래서 간단한 맵을 만들어 vimrc 파일에 넣었습니다.

nnoremap <silent> <leader>dp V:diffput<cr>
nnoremap <silent> <leader>dg V:diffget<cr>

당신은 dg 대신에 do를 사용할 수 있지만, 나는 [o] btain 대신 "diffget"을 생각하는 데 더 익숙합니다.

보너스로 다른 간단한지도를 두 번 사용합니다.

nnoremap <silent> <leader>df :call DiffToggle()<CR>

이제 df는 diffmode를 끄거나 켤 것이므로 그냥 껐다가 다시 켜십시오.

그리고 보너스 옵션은

nmap <silent> <leader>du :wincmd w<cr>:normal u<cr>:wincmd w<cr>

이렇게하면 다른 파일 / 창에서 오타 또는 원치 않는 변경을 취소 할 수 있습니다. 왜냐하면 u의 : undo는 현재 창에서 변경 사항 만 취소하기 때문입니다.

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