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

我可以使vim粘贴从和系统的剪贴板?


当前回答

注意,如果:echo has('clipboard')返回0,从系统剪贴板复制/粘贴将不起作用。在这种情况下,vim没有使用+剪贴板特性进行编译,您必须安装不同的版本或重新编译它。一些linux发行版默认提供了最小的vim安装,但是如果您安装了vim-gtk或vim-gtk3包,您仍然可以获得额外的特性。

The "* and "+ registers are for the system's clipboard (:help registers). Depending on your system, they may do different things. For instance, on systems that don't use X11 like OSX or Windows, the "* register is used to read and write to the system clipboard. On X11 systems both registers can be used. See :help x11-selection for more details, but basically the "* is analogous to X11's _PRIMARY_ selection (which usually copies things you select with the mouse and pastes with the middle mouse button) and "+ is analogous to X11's _CLIPBOARD_ selection (which is the clipboard proper).

如果这些你都想不起来,试着用“*yy”或“+yy”复制一行到你的系统剪贴板。假设您有适当的编译选项,其中一个应该可以工作。

您可能希望将其重新映射为对您更方便的内容。例如,您可以将vnoremap <C-c> "*y放在~/中。vimrc,这样您就可以直观地选择并按Ctrl+c拉到系统的剪贴板。

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

要粘贴,你可以使用“+p”或“*p”(同样,取决于你的系统和/或想要的选择),或者你可以将这些映射到其他东西。我显式地键入它们,但我经常发现自己处于插入模式。如果您处于插入模式,您仍然可以使用<C-r><C-p>*或<C-r><C-p>+以适当的缩进粘贴它们。参见help i_CTRL-R_CTRL-P。

还值得一提的是vim的粘贴选项(:help paste)。这将vim置于一个特殊的“粘贴模式”中,该模式禁用了其他几个选项,允许您使用终端模拟器或多路复用器熟悉的粘贴快捷方式轻松地粘贴到vim中。(只需输入:set paste来启用它,粘贴你的内容,然后输入:set nopaste来禁用它。)或者,您可以使用pastetoggle选项来设置切换模式的键码(:help pastetoggle)。

我建议使用寄存器而不是这些选项,但如果它们仍然太可怕,这可以是一个方便的变通方法,当你在完善你的vim排刀。

有关更详细的信息,请参阅:帮助剪贴板。

其他回答

注意,如果:echo has('clipboard')返回0,从系统剪贴板复制/粘贴将不起作用。在这种情况下,vim没有使用+剪贴板特性进行编译,您必须安装不同的版本或重新编译它。一些linux发行版默认提供了最小的vim安装,但是如果您安装了vim-gtk或vim-gtk3包,您仍然可以获得额外的特性。

The "* and "+ registers are for the system's clipboard (:help registers). Depending on your system, they may do different things. For instance, on systems that don't use X11 like OSX or Windows, the "* register is used to read and write to the system clipboard. On X11 systems both registers can be used. See :help x11-selection for more details, but basically the "* is analogous to X11's _PRIMARY_ selection (which usually copies things you select with the mouse and pastes with the middle mouse button) and "+ is analogous to X11's _CLIPBOARD_ selection (which is the clipboard proper).

如果这些你都想不起来,试着用“*yy”或“+yy”复制一行到你的系统剪贴板。假设您有适当的编译选项,其中一个应该可以工作。

您可能希望将其重新映射为对您更方便的内容。例如,您可以将vnoremap <C-c> "*y放在~/中。vimrc,这样您就可以直观地选择并按Ctrl+c拉到系统的剪贴板。

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

要粘贴,你可以使用“+p”或“*p”(同样,取决于你的系统和/或想要的选择),或者你可以将这些映射到其他东西。我显式地键入它们,但我经常发现自己处于插入模式。如果您处于插入模式,您仍然可以使用<C-r><C-p>*或<C-r><C-p>+以适当的缩进粘贴它们。参见help i_CTRL-R_CTRL-P。

还值得一提的是vim的粘贴选项(:help paste)。这将vim置于一个特殊的“粘贴模式”中,该模式禁用了其他几个选项,允许您使用终端模拟器或多路复用器熟悉的粘贴快捷方式轻松地粘贴到vim中。(只需输入:set paste来启用它,粘贴你的内容,然后输入:set nopaste来禁用它。)或者,您可以使用pastetoggle选项来设置切换模式的键码(:help pastetoggle)。

我建议使用寄存器而不是这些选项,但如果它们仍然太可怕,这可以是一个方便的变通方法,当你在完善你的vim排刀。

有关更详细的信息,请参阅:帮助剪贴板。

如果你想改变你的vimrc,其他的解决方案是很好的…然而,我想要一个简单的方法从vim复制到我的系统键盘。这是我想到的。

选择要复制的文本与可视模式v 按:(它会自动展开显示:'<,'>) 输入y *或y +(取决于您的系统)将所选文本拉到系统剪贴板

还有一种方法是直接粘贴到'r'ead 'cat'输出:

:r!cat

这将在前台运行cat,所以你可以发送到终端你想要插入/在你的剪贴板。 完成后,发送ctrl+d以结束流。

这样做的好处是你不需要打乱缩进——文本就这样被插入。 注意,在cat位置可以有任何命令,比如fold(在发现gq之前我一直使用这个命令)或任何其他过滤工具。

虽然'+'寄存器似乎更vimic,但它并不适用于所有平台,而r!凯特只是在工作。

由于vim 8的右键单击默认启用可视模式。这可以防止“正常的”复制和粘贴(称之为“设计缺陷”https://github.com/vim/vim/issues/1326)。 解决方法:

回显“set mouse-=a”>> ~/。vimrc。

退出并重启vim。

对于那些Vim安装不支持*和+寄存器的人,请快速注意。不需要从剪贴板下载新的Vim安装来粘贴。下面是另一种方法:

安装parcellite(一个具有低内存占用的剪贴板管理器); 在你的.vimrc文件中,添加以下内容: 命令剪切r !parcellite -c 重启vim。

现在,当你输入:Clip as a ex命令时,剪贴板的内容将被粘贴到光标处。您还可以将新命令映射到功能键,以便能够通过一次击键完成此操作。