协慌网

登录 贡献 社区

如何使 Vim 从系统剪贴板粘贴(并复制到系统)?

与其他编辑器不同,vim 将复制的文本存储在其自己的剪贴板中。因此,对我来说很难从网页中复制一些文本并将其粘贴到当前的工作文件中。碰巧我必须打开 gedit 或手动键入它。

我可以在系统剪贴板中粘贴 vim 吗?

答案

"*"+寄存器用于系统剪贴板( :help registers )。根据您的系统,他们可能会做不同的事情。例如,在 OSX 或 Windows 等不使用 X11 的系统上, "*寄存器用于读写系统剪贴板。在 X11 系统上,两个寄存器都可以使用。有关更多详细信息,请参见:help x11-selection ,但是基本上, "*类似于 X11 的PRIMARY选择(通常会复制使用鼠标选择的内容并使用鼠标中键粘贴),而"+类似于 X11 的CLIPBOARD选择(这是剪贴板固有的)。

如果这一切都困扰您,请尝试使用"*yy"+yy将一行复制到系统剪贴板中。假设您具有适当的编译选项,则一个或另一个应该起作用。您可能希望将其重新映射为更方便的方式。例如,您可以在〜/ .vimrc 中放置vnoremap <Cc> "*y ,以便您可以直观地选择并按Ctrl + c来拉到系统的剪贴板。

请注意,复制 / 从系统剪贴板粘贴不工作 ,如果:echo has('clipboard')返回 0。在这种情况下,VIM 不与编译+clipboard功能,你就必须安装一个不同的版本或重新编译它。某些 linux 发行版默认提供最小的 vim 安装,但是通常,如果您安装vim-gtkvim-gtk3软件包 ,则可以获得更多功能。

您可能还想看看:help cb描述的'clipboard'选项。在这种情况下,您可以:set clipboard=unnamed:set clipboard=unnamedplus使所有:set clipboard=unnamedplus / 删除操作自动复制到系统剪贴板。在某些情况下,当您将其他内容存储在剪贴板中时,这可能会带来不便,因为它将覆盖它。

要粘贴,您可以使用"+p"*p (同样取决于系统和 / 或所需的选择),也可以将它们映射到其他对象。我明确输入了它们,但我经常发现自己处于插入模式。如果您处于插入模式,则仍然可以使用<Cr><Cp>*<Cr><Cp>+粘贴适当的缩进。参见:help i_CTRL-R_CTRL-P

还值得一提的是 vim 的paste选项( :help paste )。这使 vim 进入特殊的 “粘贴模式”,该模式会禁用其他几个选项,从而使您可以使用终端仿真器或多路复用器熟悉的粘贴快捷方式轻松粘贴到 vim 中。只需键入:set paste启用它,粘贴您的内容,然后键入:set nopaste禁用它。另外,您可以使用pastetoggle选项设置用于切换模式的键码( :help pastetoggle )。我建议使用寄存器代替这些选项,但是如果它们仍然太吓人,在完善 vim 印章的同时,这可能是一种方便的解决方法。

有关更多详细信息,请参见:help clipboard

您可以通过 gnome-terminal 的粘贴快捷方式复制到 vim 中。使文件处于插入模式并使用

Ctrl + Shift + v

事先记住

:set paste

避免弄乱压痕。

的 Linux

在我的 Linux 系统上, +*寄存器映射到 X11 选择,可以使用鼠标中键粘贴。当使用:set clipboard=unnamed:set clipboard=unnamed :set clipboard=unnamedplus ,寄存器将映射到剪贴板,并可以使用 CTRL-V 粘贴。

具体细节似乎在某种程度上取决于配置和系统,因此您的工作量肯定会有所不同。但是,它绝对应该使您指向正确的方向。

也可以看看

http://vim.wikia.com/wiki/Accessing_the_system_clipboard