防止Vim在退出时清除剪贴板

时间:2011-06-23 11:56:23

标签: vim clipboard

当我从终端打开Vim时,将一些文本复制到系统剪贴板,然后退出Vim,系统剪贴板将被清除。

如何将复制的文字保存在剪贴板中?

7 个答案:

答案 0 :(得分:36)

superuser合成答案,只需将以下内容添加到.vimrc

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

答案 1 :(得分:11)

为GDE安装Parcellite或glipper,为KDE安装klipper。

重新启动计算机或手动运行。

请参阅:https://wiki.ubuntu.com/ClipboardPersistence

答案 2 :(得分:5)

基于Matt's answer,以下使用xclip代替xsel

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

答案 3 :(得分:2)

我遇到了这个问题和一个相关的问题,即使用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 暂停vim也会清除剪贴板。我已经延长了Matt's solution以解决这两个问题:

if executable("xsel")

如果未安装xselnnoremap后卫可以避免错误。 vnoremap映射在从正常模式挂起时保留剪贴板,{{1}}映射处理从可视或选择模式暂停。

我已经确认这适用于vim 7.4和8.0。

答案 4 :(得分:1)

如果我错了,请纠正我,但是根据我对Vim的理解...... 1)Vim使用寄存器代替剪贴板来存储复制/剪切数据 2)这些寄存器在状态文件中退出vim时保留,但在正在运行的进程外无法访问,除非您手动打开文件并检查其内容
3)在Vim运行时将内容保存到+ registre 允许您粘贴到其他应用程序。
4)通过暂停vim(CTRL-Z)而不是关闭它,这些寄存器仍然可以访问。

这是否提供了帮助?

答案 5 :(得分:1)

基于Matt's answer

使用他的方法复制多行时,在粘贴时在行尾添加斜杠。

这应该对此进行补救。

autocmd VimLeave * exe ":!echo " . shellescape(getreg('+')) . " | xclip -selection clipboard"

当我将“ shellescape”与“ system”一起使用时,换行符不断逃脱。但是当我使用exe时并没有发生。

不知道真正的原因。但这行得通。

答案 6 :(得分:0)

使用NeoVim。默认情况下,它不会在退出时清除剪贴板。您仍然需要set clipboard=unnamedplus(通常在~/.config/nvim/init.vim中)并安装了xselxclip工具。

请记住,其他一些默认设置也有所不同。