当我从终端打开Vim时,将一些文本复制到系统剪贴板,然后退出Vim,系统剪贴板将被清除。
如何将复制的文字保存在剪贴板中?
答案 0 :(得分:36)
从superuser合成答案,只需将以下内容添加到.vimrc
autocmd VimLeave * call system("xsel -ib", getreg('+'))
答案 1 :(得分:11)
为GDE安装Parcellite或glipper,为KDE安装klipper。
重新启动计算机或手动运行。
答案 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")
如果未安装xsel
,nnoremap
后卫可以避免错误。 vnoremap
映射在从正常模式挂起时保留剪贴板,{{1}}映射处理从可视或选择模式暂停。
我已经确认这适用于vim 7.4和8.0。
答案 4 :(得分:1)
如果我错了,请纠正我,但是根据我对Vim的理解......
1)Vim使用寄存器代替剪贴板来存储复制/剪切数据
2)这些寄存器在状态文件中退出vim时保留,但在正在运行的进程外无法访问,除非您手动打开文件并检查其内容
3)在Vim运行时将内容保存到+ registre 允许您粘贴到其他应用程序。
4)通过暂停vim(CTRL-Z)而不是关闭它,这些寄存器仍然可以访问。
这是否提供了帮助?
答案 5 :(得分:1)
使用他的方法复制多行时,在粘贴时在行尾添加斜杠。
这应该对此进行补救。
autocmd VimLeave * exe ":!echo " . shellescape(getreg('+')) . " | xclip -selection clipboard"
当我将“ shellescape”与“ system”一起使用时,换行符不断逃脱。但是当我使用exe时并没有发生。
不知道真正的原因。但这行得通。
答案 6 :(得分:0)
使用NeoVim。默认情况下,它不会在退出时清除剪贴板。您仍然需要set clipboard=unnamedplus
(通常在~/.config/nvim/init.vim
中)并安装了xsel
或xclip
工具。
请记住,其他一些默认设置也有所不同。