salir reemplazar portapapeles pegar guardar editar descargar copiar buscar vim clipboard

reemplazar - Evite que Vim limpie el portapapeles al salir



vim guardar y salir (5)

Cuando abro Vim desde una terminal, copio texto en el portapapeles del sistema y salgo de Vim, el portapapeles del sistema se borra.

¿Cómo mantener el texto copiado en el portapapeles?



Me encontré con este problema y un problema relacionado donde la suspensión de vim con ctrl-z también borrará el portapapeles. He extendido la solución de Matt para arreglar ambos:

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

El protector if executable("xsel") está ahí para evitar errores si xsel no está instalado. El mapeo nnoremap preserva el portapapeles cuando se suspende desde el modo normal y la asignación de vnoremap se suspende desde los modos visual o select.

Confirmé que esto funciona en vim 7.4 y 8.0.


Por favor, corrígeme si me equivoco, pero desde mi comprensión de Vim ...
1) Vim usa registros en lugar del portapapeles para almacenar datos copiados / cortados.
2) Estos registros se conservan al salir de vim en un archivo de estado, pero no son accesibles fuera del proceso en ejecución, a menos que abra manualmente el archivo e inspeccione su contenido.
3) Guardar cosas en el registro + mientras Vim se ejecuta le permite pegar en otras aplicaciones.
4) Al suspender vim (CTRL-Z) en lugar de cerrarlo, estos registros siguen siendo accesibles.

¿Eso proporciona asistencia?


Según la respuesta de Matt , lo siguiente usa xclip lugar de xsel :

autocmd VimLeave * call system(''echo '' . shellescape(getreg(''+'')) . / '' | xclip -selection clipboard'')


Sintetizando las respuestas del superuser , simplemente agregue lo siguiente a su .vimrc

autocmd VimLeave * call system("xsel -ib", getreg(''+''))