Sự cố này có thể do tệp _vimrc mặc định được tạo bởi trình cài đặt trên Windows. Nếu bạn vẫn đang sử dụng tệp mặc định đó hoặc nếu bạn đã sao chép tệp tại một số điểm, thì hãy kiểm tra chức năng bạn đã gán chodiffexpr
tùy chọn. Một trong những bản vá giữa Vim 7.3 và 7.4 đã giới thiệu các quy tắc trích dẫn mặc định mới cho trình bao cmd.exe trên Windows. Bản vá này đã phá vỡ cách giải quyết trong hàm MyDiff () được thiết kế để khắc phục vấn đề tương tự được giải quyết bằng bản vá.
Hàm MyDiff () đã được sửa bởi phiên bản 7.4.103 bằng cách sửa trình cài đặt. Đây là hàm MyDiff () mà trình cài đặt mới nhất sẽ tạo cho bạn nếu bạn chỉ muốn sao chép nó vào _vimrc:
function MyDiff()
let opt = '-a --binary '
if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif
if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif
let arg1 = v:fname_in
if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif
let arg2 = v:fname_new
if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif
let arg3 = v:fname_out
if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif
if $VIMRUNTIME =~ ' '
if &sh =~ '\<cmd'
if empty(&shellxquote)
let l:shxq_sav = ''
set shellxquote&
endif
let cmd = '"' . $VIMRUNTIME . '\diff"'
else
let cmd = substitute($VIMRUNTIME, ' ', '" ', '') . '\diff"'
endif
else
let cmd = $VIMRUNTIME . '\diff'
endif
silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3
if exists('l:shxq_sav')
let &shellxquote=l:shxq_sav
endif
endfunction
Bạn có thể xem phiên bản đầy đủ của bạn trong Vim sử dụng :version
hoặc :intro
lệnh, hoặc vào màn hình splash lúc khởi động.
Thật không may nếu bạn muốn có một trình cài đặt chính thức, bạn sẽ cần đợi đến 8.0 hoặc cài đặt bản dựng hàng đêm . Tuy nhiên, bạn có thể cài đặt Vim từ những nơi khác hoặc xây dựng Vim của riêng bạn .
Sao chép trên Stack Overflow (bất thường, theo chủ đề trên cả hai trang web), nếu câu trả lời này được cập nhật thì câu trả lời khác cũng vậy.