저는 본업에서 Unity diff만 다루므로 별칭을 정의하고 싶습니다.
alias diff='diff -puN'
내 .zshrc
.
vim 명령줄 모드에서 셸을 사용할 때 :!diff file1 file2
vim이 대화형 셸을 호출하지 않기 때문이라고 생각합니다.
그래서 별칭을 에서 로 옮겼습니다. .zshrc
이를 통해 .zshenv
vim 내부에서 기존의 일반 Unity 차이점을 얻을 수 있습니다(저는 일반적으로 이 출력을 선호합니다 vimdiff
).
반면에 이렇게 하면 vimdiff
균일한 차이가 분명하게 구문 분석되지 않습니다(그렇지만 Error E97
설명 help E97
이나 참조가 나에게 유용한 것 같지 않습니다. 관련성이 없어 보이거나(예: options shell
) 내 머리 위로 떠오릅니다(option diffexpr
). .
vimdiff
동시에 직장 별칭을 어떻게 사용해야 합니까 ?diff
답변1
명령의 의미를 변경하면 diff
Vim에 큰 피해를 줄 수 있습니다(아래에 설명되어 있습니다 :help diff-diffexpr
:"diff"의 출력은 일반 "ed" 스타일 diff여야 합니다. 상황에 따른 차이를 사용하지 마세요.) 및 기타 가능한 절차.
동일한 이름을 가진 순수한 쉘 별칭은 괜찮습니다. 이는 명령을 대화식으로 입력할 때(또는 거의 사용하지 않는 쉘 함수에서)에만 고려되기 때문입니다. 비대화형 사용을 위해 diff 명령을 변경해야 하는 경우(예: Vim의 :!
명령에서) 쉘 래퍼 스크립트/내보낸 쉘 함수/별칭을 다음에서 정의하는 것이 좋습니다..zshenv
다른 이름으로,예를 들어 diffu
.
프로그램이 손상될 위험에도 불구하고 동일한 내보내기 별칭을 계속 사용하려면 Vim을 다시 구성하여 해당 별칭을 사용하지 않도록 해야 합니다. 불행하게도 diff 실행 파일에는 완전한 사용자 정의를 작성해야 하는 간단한 옵션이 없습니다 'diffexpr'
. 다행히 :help diff-diffexpr
아래에는 기본 예제를 에뮬레이트하는 예제가 있습니다 . 다음과 같이 diff 별칭을 피하려면 약간만 변경하면 됩니다.diff의 전체 경로를 지정하십시오..
set diffexpr=MyDiff()
function MyDiff()
let opt = ""
if &diffopt =~ "icase"
let opt = opt . "-i "
endif
if &diffopt =~ "iwhite"
let opt = opt . "-b "
endif
silent execute "!/usr/bin/diff -a --binary " . opt . v:fname_in . " " . v:fname_new .
\ " > " . v:fname_out
endfunction