Я столкнулся с этой проблемой и связанной с ней проблемой, при которой приостановка vim с ctrl-z
также очистила бы буфер обмена.Я расширил решение Мэтта , чтобы исправить оба:
set clipboard=unnamedplus
if executable("xsel")
function! PreserveClipboard()
call system("xsel -ib", getreg('+'))
endfunction
function! PreserveClipboadAndSuspend()
call PreserveClipboard()
suspend
endfunction
autocmd VimLeave * call PreserveClipboard()
nnoremap <silent> <c-z> :call PreserveClipboadAndSuspend()<cr>
vnoremap <silent> <c-z> :<c-u>call PreserveClipboadAndSuspend()<cr>
endif
Защита if executable("xsel")
существует, чтобы избежать ошибок, если xsel
не установлен.Отображение nnoremap
сохраняет буфер обмена при приостановке из нормального режима, а отображение vnoremap
обрабатывает приостановку из визуального или выборочного режимов.
Я подтвердил, что это работает на vim 7.4 и 8.0.