如何使vim粘贴(和复制)到系统剪贴板?

1080

不同于其他编辑器,vim会将复制的文本存储在自己的剪贴板中。因此,我很难从网页上复制一些文本并将其粘贴到当前工作的文件中。所以我要么得打开gedit,要么手动输入。

我能否让vim从系统剪贴板复制和粘贴呢?


11
可能是如何使用vim复制到剪贴板?的重复问题。 - BuZZ-dEE
8
“复制”+y、“粘贴”+p的用法与“拷贝”和“粘贴”类似,但你需要在操作前指定注册表。 - Banjocat
2
要使用以下命令,请确保您已经执行了sudo apt-get install vim-gnome,这将为内置的vim添加使用系统剪贴板的功能。 - Harnirvair Singh
2
对于这里的许多读者来说,vim-gnome 可能过于复杂或在他们的操作系统/发行版中不可用,而我怀疑 vim-gtk 和最好是 vim-gtk3 更有可能存在并拉取更少的依赖项,同时仍提供剪贴板集成(至少对于那些仍在使用 X11 的人;我不确定这一切与 Wayland 如何交互)。 - underscore_d
3
在 Fedora 上默认情况下不能访问剪贴板(您需要 gvim)。有关在 Fedora 上安装支持剪贴板的 Vim 的详细信息,请参阅 https://superuser.com/questions/194747/how-to-install-vim-with-clipboard-support-on-fedora。 - icc97
显示剩余7条评论
38个回答

13

2
我正在Windows 8.1中使用cmder工具内的vim。当您进入cmder设置>键和宏>粘贴时,我得到了用于多行粘贴的shift+insert命令和用于单行粘贴的ctrl+v。 - Zubair Alam
1
对我来说,简单的右键点击就像魔法一样!只需要右键点击! - Fr0zenFyr
3
因为您正在使用终端和 SSH,vim 无法通过 SSL 访问您本地系统的剪贴板。SHIFT+INSERT 可以工作是因为它是您终端(或在您的情况下是 PuTTY)的粘贴选项;但是缩进可能会出现问题。请查看我答案中关于 paste 选项的最后一段来进行纠正。 - Conner
2
@jinksPadlock。谢谢..是的..我可以通过鼠标复制/粘贴..但是我正在尝试弄清如何仅使用"键盘"来完成此操作。从Windows复制到VIM可能只能通过Putty键盘完成,但反向则不行。在Windows的bash中..目前无法实现任何方向的复制/粘贴。编译了一份资源列表,以指导人们正确地进行操作,也可供我们使用..如果您有任何要补充的内容..也许您可以在这里添加:https://stackoverflow.com/questions/45271895/how-to-copy-paste-from-windows-application-to-vim-gnome-running-via-ssh-to-linu - alpha_989
1
@alpha_989 迟到总比不来好;) 我现在手头没有Windows操作系统,所以无法添加到jinksPadlock。SHIFT+INS从Linux主机到ssh vim同样有效,鼠标第三个点击也是如此。 - tuk0z
显示剩余6条评论

10

这些组合键可以在任何操作系统上使用。

使用鼠标选择目标文本,然后参考以下键序列进行复制、剪切和粘贴。

  • 复制:Ctrl + Insert
  • 粘贴:Shift + Insert
  • 剪切:Shift + Del
  • 粘贴:Shift + Insert

我还没有测试过这个答案,但(有点令人惊讶?)它似乎不是重复的。 - Michael
复制:Ctrl + Del,它就删除了! - Pathros
@Pathros 抱歉,我修复了它。 - s_signal
可能是最快的解决方案,适用于 Fedora Linux。谢谢! - Kalizi
我的键盘自从90年代以来就没有那个键了。还有其他的键吗? - undefined

8
通过ssh在不同的Linux机器之间解决这个问题最简单的方法是:
  1. 检查vim是否支持X-11剪贴板:vim --version | grep clipboard。如果报告-clipboard-xterm_clipboard,则需要安装vim-gtkvim-gnome(在Arch Linux上为gvim)。

  2. 将以下行添加到您的.vimrc中:

set clipboard=unnamedplus
set paste
  1. 如果您通过ssh在不同的机器上登录,请使用-Y选项:ssh -Y machine

现在,复制和粘贴应该像在单个机器上一样正常工作,在不同的机器上只需使用y进行复制和p进行粘贴。请注意,在您想要使用此功能的所有机器上修改.vimrc


我认为,X服务器也应该在服务器上可用才能使其工作。是的!它可能通过vim-gtk安装。我认为,xvfb将是运行X服务器的另一种选择。 - Ajeeb.K.P

8

这是在Linux(Ubuntu 20.04)中对我有效的操作

  • 复制到系统剪贴板:

    1. 在Visual模式下选择要复制的内容。
    2. 键入"+y
    3. Enter
  • 从系统剪贴板中粘贴:

    1. 移动到想要在vim中粘贴已复制文本的位置。
    2. 只需输入
      • "+P 在光标之前粘贴 OR
      • "+p 在光标之后粘贴。

了解更多操作方式: 从其他程序/到其他程序复制和粘贴到 Vim!


7

在Linux或Mac上使用Vim 8+,您现在可以直接使用操作系统的本地粘贴功能(在Linux上为ctrl+shift+V,在Mac上为cmd+V),不需要按i进入插入模式。

这将粘贴操作系统剪贴板的内容,保留空格和制表符而不会添加自动缩进。它相当于旧的:set pasteictrl+shift+Vesc:set nopaste方法。

您甚至不需要安装+clipboard+xterm_clipboard Vim特性。这个功能被称为“括号粘贴”。有关更多详情,请参见关闭vim中粘贴文本时的自动缩进


这个需要作为当前的正确答案__远远地__排在前面。 - Victor Valente

7

针对那些Vim安装不支持*+寄存器的人们,这里有一个替代方法,不需要下载新的Vim安装程序即可粘贴文本到剪贴板中:

  1. Install parcellite (a clipboard manager with a low memory footprint);

  2. In your .vimrc file, add the following:

    command Clip r !parcellite -c
    
  3. Restart vim.

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

7
如果您正在使用鼠标,请先执行以下操作:
 :set paste 

然后,右键单击鼠标,缓冲区中的内容将被粘贴。

6
这对我很有用: Ctrl+Shift+V

4
@neel的回答已经表明了这一点。如果你想说这个方法对你也起作用,那么应该只是发表一个评论,或者更好的方式是点赞。 - ericbn

5

我在一台2017年中期的Macbook Pro上使用iTerm2作为主要开发环境,遇到了这个与vim相关的问题。

正如其他答案所建议的那样,我运行了vim --version命令,并注意到它返回了-clipboard,这意味着我的机器所安装的vim版本没有使用剪贴板选项进行编译。

homebrew提供的vim包似乎是使用clipboard选项进行编译的,因此我的解决方法是:

  1. 运行brew install vim
  2. set clipboard+=unnamed添加到我的~/.vimrc文件中
  3. 关闭并重新打开iTerm2

4

自从vim 8版本开始,右键默认启用了可视模式。这会阻止“正常”的复制和粘贴(可以称之为“设计缺陷”,详见https://github.com/vim/vim/issues/1326)。通过以下方式修复:

echo "set mouse-=a" >> ~/.vimrc

退出并重新启动vim即可。

"最初的回答"


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接