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?
Instale Parcellite o glipper para Gnome y klipper para KDE.
Reinicia tu computadora o ejecútala manualmente.
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(''+''))