Bạn không thể thực hiện việc này trong tệp gốc nhưng bạn có thể thực hiện việc này mà không cần sử dụng các tệp riêng biệt, chỉ có các bộ đệm riêng biệt. Điều này sẽ có tác dụng nếu bạn đã sao chép một chương trình con trong sổ đăng ký a
(ví dụ, với "ay
gõ vào chế độ trực quan) và chương trình con khác trong sổ đăng ký b
:
enew | call setline(1, split(@a, "\n")) | diffthis | vnew | call setline(1, split(@b, "\n")) | diffthis
Để tự động:
let g:diffed_buffers=[]
function DiffText(a, b, diffed_buffers)
enew
setlocal buftype=nowrite
call add(a:diffed_buffers, bufnr('%'))
call setline(1, split(a:a, "\n"))
diffthis
vnew
setlocal buftype=nowrite
call add(a:diffed_buffers, bufnr('%'))
call setline(1, split(a:b, "\n"))
diffthis
endfunction
function WipeOutDiffs(diffed_buffers)
for buffer in a:diffed_buffers
execute 'bwipeout! '.buffer
endfor
endfunction
nnoremap <special> <F7> :call DiffText(@a, @b, g:diffed_buffers)<CR>
nnoremap <special> <F8> :call WipeOutDiffs(g:diffed_buffers) | let g:diffed_buffers=[]<CR>
Lưu ý rằng bạn có thể muốn đặt tùy chọn hidden
nếu Vim từ chối từ bỏ tệp đã thay đổi (xem :h abandon
).
Điều này làm việc tuyệt vời nhưng tôi tiếp tục nhận được "Không có bộ đệm đã bị xóa sổ: bwitpeout! 2" (số thay đổi) khi tôi gọi WipeOutDiffs qua f8. Điều gì gây ra điều này? Cảm ơn!! –