모든 공백을 무시하도록 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!
이렇게하면 명령이 실행 된 후 다시 그려집니다.
'program tip' 카테고리의 다른 글
파생 클래스가이 코드에서 보호 된 멤버 함수를 호출 할 수없는 이유는 무엇입니까? (0) | 2020.11.25 |
---|---|
srcdoc =“…”와 src =“data : text / html,…”의 차이점은 (0) | 2020.11.25 |
std :: pow (double, int)가 C ++ 11에서 제거 된 이유는 무엇입니까? (0) | 2020.11.25 |
Android ListView 어댑터 notifyDataSetInvalidated () 대 notifyDataSetChanged () (0) | 2020.11.25 |
Docker의 사용자 파일 소유권 이해 : 연결된 볼륨의 권한 변경을 방지하는 방법 (0) | 2020.11.25 |