vim : 두 파일을 두 파일로 나누지 만 전체 파일은 아닙니까?


14

시스템을 Nagios 2에서 Nagios 3으로 업그레이드했으며 이제 이전 구성 파일과 새 구성 파일의 차이점을 비교하고 있습니다.

구성 파일에 중요한 변경 사항이 있으며 vimdiff가 관련이없는 차이점을 너무 많이 표시하고 #줄의 시작 부분에서 주석을 처리하는 데 어려움이 있기 때문에 전체 파일에 대해 diff를 수행하고 싶지 않습니다 .

vim 또는 vimdiff와 유사한 기능을 사용하여 두 개의 다른 파일에서 두 개의 특정 섹션에 대해 차이점을 수행 할 수 있습니까?

예를 들어, 다음과 같은 줄만 다른 부분으로 만들고 싶습니다.

# Define a service to check the load on the local machine. 

define service{
    use                             local-service         ; Name of service template to use
    host_name                       localhost
    service_description             Blah Blah
    check_command                   Blah Blah
    }

답변:


19

linediff.vim 이 원하는 것처럼 들릴 것입니다.“두 개의 텍스트 블록에서 대화 형 diff를 수행하십시오.”

:Linediff명령으로 각 블록 (선 범위)을 지정합니다 (예 : :4,10Linediff먼저 시각적 선택을 한 다음 입력 :Linediff( :'<,'>LineDiff)). 범위는 동일한 파일 / 버퍼 또는 다른 범위 일 수 있습니다. 두 개의 범위를 지정하면 지정된 범위에 대해 두 개의 새로운 diff 모드 버퍼 (분할)가있는 새 탭이 열립니다. :w이 버퍼 중 하나를 편집 하여 원래 범위를 업데이트 할 수 있습니다 . 완료되면 :qdiff 버퍼에서 :LinediffReset벗어나 원래 버퍼의 범위 지정자를 제거하십시오.

linediff.vim에 대해 처음 알게 된 Stackoverflow 답변 은 몇 가지 매핑을 제안합니다. 이 질문 에 대한 다른 답변 에도 동일한 문제를 해결할 수있는 사용자 정의 솔루션 및 다른 플러그인이 언급되어 있습니다.


6

이 작업을 수행하는 간단한 방법을 찾지 못했지만 NrrwRgn (Narrow Region) 플러그인 인 http://www.vim.org/scripts/script.php?script_id=3075에서 꽤 성공했습니다 . 버퍼 영역을 선택하고 새 버퍼에서 해당 영역을 열 수 있습니다. 새 버퍼를 편집 할 수 있으며, 닫을 때 플러그인은 편집 한 텍스트를 원본 파일의 원래 영역으로 자동 복사합니다. 하나 이상의 파일의 다른 영역을 새 버퍼로 복사 한 다음 새 버퍼를 분할 할 수도 있습니다. 이것이 내가 플러그인을 사용하여 한 파일에 정의 된 유사한 기능 간의 차이점을 확인하는 방법입니다.

귀하의 경우, Vim에서 두 파일을 모두 열고 V첫 번째 파일에서 관심있는 섹션을 선택하고 \nr해당 섹션을 새 버퍼에 복사하도록 입력 하십시오. 다른 파일에서 유사한 섹션에 대해 반복하십시오. 그런 다음 두 개의 새 버퍼 각각에서을 실행하십시오 :diffthis.


감사합니다! 무엇을 \nr할 것인가?
Stefan Lasiewski

1
플러그인은 매핑 <Leader>nr경우, <Leader>플러그인 명령에 디폴트`\`에 복사하는 새로운 버퍼로 선택한 영역.
garyjohn

@garyjohn NrrrRgn분할을 어떻게 정리 합니까?
dev

1
@dev : 내 ~ /의 .vimrc에 NrrwRgn 구성의 다음 두 줄을 가지고 let g:nrrw_rgn_vert = 1let g:nrrw_rgn_protect = 'n'. 전자의 경우 NrrwRgn이 현재 창의 왼쪽으로 분할됩니다. 그들이 왼쪽이나 맨 왼쪽으로 열면 잊어 버렸습니다. 즉, 더 이상 NrwRgn을 사용하지 않고 더 나은 것을 발견했습니다. Linediff. 새 영역에서 새 영역을 열면 더 깔끔하고 편리합니다. LInediff는 http://www.vim.org/scripts/script.php?script_id=3745또는 에서 찾을 수 있습니다 https://github.com/AndrewRadev/linediff.vim.
garyjohn

많은 감사합니다 @ garyjohn. NrrwRgn가장 왼쪽 또는 상단을 수행하므로 분할을 거의 관리 할 수 ​​없습니다. 나는 !변종을 시도했지만 매우 깨지기 쉬운 것으로 판명되었습니다 (스크립트 오류 + 원본 파일로 되돌릴 수있는 명확한 방법 없음). 줄 것이다 linediff.vim나는 희망 할 너무 비록 시도를 NrrwRgn미래에 향상시킨다.
dev

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