program tip

모든 공백을 무시하도록 vimdiff를 구성하는 방법이 있습니까?

radiobox 2020. 11. 25. 07:51
반응형

모든 공백을 무시하도록 vimdiff를 구성하는 방법이 있습니까?


나는 vim -d file1 file2그들 사이의 차이점을보기 위해 사용 하고 있습니다. 이것은 잘 작동하지만 공백 변경을 무시하고 싶습니다. 소스 코드 파일과 관련이 없습니다.

Vim 도움말은 다음 명령이 마법을 수행한다고 말합니다.

set diffopt+=iwhite

그러나 불행히도이 명령 -b은 diff 도구 명령 줄 에만 추가 되며 후행 공백 만 무시합니다. -w모든 공백 변경을 무시하려면 diff에 대한 올바른 명령 줄 키는이어야합니다 . 하지만 Vim에서 직접 diff 명령 줄을 수정하는 방법을 찾을 수 없습니다. 물론 사용자 정의 diff를 컴파일하거나 diff를 diff.sh로 대체 할 수 있지만 약간보기 흉하게 보입니다.

Vim이 파일 차이를 표시하기 위해 diff 도구와 상호 작용하는 방식을 수정하는 더 좋은 방법이 있습니까?


예. iwhite옵션을 설정 하되 추가적으로 diffexpr비워 둡니다.

vim 문서 의 관련 섹션에서 :

아이 화이트

공백 양의 변경을 무시하십시오. 'diffexpr'이 비어있는 경우 "diff"명령에 "-b"플래그를 추가합니다. 이것이 정확히 무엇을하는지 "diff"명령의 문서를 확인하십시오. 후행 공백 추가는 무시해야하지만 선행 공백은 무시해야합니다.

을 설정하여 사용자 정의 diff 명령 줄을 제공 할 수도 있습니다 diffexpr. 특히 vimdiff man 페이지 에 대한 토론을 참조하십시오 .

'diffexpr'옵션은 두 파일을 비교하고 차이점을 찾기 위해 표준 "diff"프로그램이 아닌 다른 것을 사용하도록 설정할 수 있습니다.

'diffexpr'이 비어 있으면 Vim은 다음 명령을 사용하여 file1과 file2의 차이점을 찾습니다.

diff file1 file2 > outfile

이것은 원하는 것을 구현합니다 ( 으로 변경된 diffexpr문서 에서 가져옴 ).-b-w

set diffopt+=iwhite
set diffexpr=DiffW()
function DiffW()
  let opt = ""
   if &diffopt =~ "icase"
     let opt = opt . "-i "
   endif
   if &diffopt =~ "iwhite"
     let opt = opt . "-w " " swapped vim's -b with -w
   endif
   silent execute "!diff -a --binary " . opt .
     \ v:fname_in . " " . v:fname_new .  " > " . v:fname_out
endfunction

... 나는 아직도 선이있는 매핑 처리에 대한 더 나은 diffexpr 도우미를 찾고 있어요 ( GNU diff 명령 도 함께, -w대신 -b, 대신 주석 처리 된 줄과 같은 사소한 편집으로 여분의 공백을 결합하여 당황한다). 어쩌면 diffchar ?


고마워요, 저를 도왔습니다. 이제 ~ / .vimrc에서 (Adam K가 제안한 것보다 더 간단합니다) 필요합니다.

set diffopt+=iwhite

set diffexpr=""

그리고 그것은 그것을합니다 ... 그것은 내가 아는 가장 강력한 diff 도구입니다.


Adam Katz의 솔루션에 대한 의견에서 제기 된 문제 해결 :

vim 버전 및 사용자 설정에 따라 silent명령이 실행 된 후 화면을 다시 그리는 것을 무시할 수 있습니다. 나는 또한 :diffo제안 된를 사용한 후 실행할 때마다 발생하는이 문제에 직면 했습니다 diffexpr. 내 해결책은 자동 실행 명령을 다음과 같이 변경하는 것입니다.

silent execute "!diff -a --binary " . opt .
 \ v:fname_in . " " . v:fname_new .  " > " . v:fname_out | redraw!

이렇게하면 명령이 실행 된 후 다시 그려집니다.

참고 URL : https://stackoverflow.com/questions/1265410/is-there-a-way-to-configure-vimdiff-to-ignore-all-whitespaces

반응형