访问系统剪贴板没有特殊寄存器

时间:2016-05-19 01:06:52

标签: vim

我试图在vim中写一组映射来从vim寄存器中放入,但没有剪贴板支持(即用+剪贴板编译)。如果不是这样,那么有一个中途解决方案会很棒 到目前为止,我已经能够将文本移动到cat,将其打印在屏幕底部以便于选择,但这只能按行工作,所以如果我想复制一行的一部分,我必须cat整个事情。

nnoremap <leader>Y V:w !cat<cr>
vnoremap <leader>y :w !cat<cr>

我想知道是否有某种方式使用寄存器,并将寄存器内容粘贴到cat

1 个答案:

答案 0 :(得分:1)

如果您安装了xclip,或者系统剪贴板的某个等效接口,则可以使用:

nnoremap <leader>Y V""Y:call system('xclip -i', @")<cr>
vnoremap <leader>y ""y:call system('xclip -i', @")<cr>

哪个会直接拉到系统剪贴板。然后您可以使用:

nnoremap <leader>p :let @" = system('xclip -o')<cr>""p

从剪贴板中放入。

如果您想坚持使用显示选择方法,可以使用:

nnoremap <leader>Y V""Y:echo @"<cr>
vnoremap <leader>Y V""Y:echo @"<cr>
vnoremap <leader>y ""y:echo @"<cr>

这将拉到标准的yank寄存器,然后将其内容放入屏幕底部的窗口,方式与您拥有的相同,但具有字符精度。还有:

:echo system('cat', @")

这基本上是:echo @"的长篇形式。它只是意味着,调用系统命令'cat',然后管道它是"寄存器的内容。请注意,它不会作为命令行参数传递,看起来像:echo system('cat ' . @")