如何在Vim中复制到剪贴板?

How to copy to clipboard in Vim?

是否可以直接从VIM复制到剪贴板?yy只将内容复制到vim的内部缓冲区。我想复制到操作系统的剪贴板。在维姆身上有没有这样的命令,或者你只能在维姆身上猛拉东西?


*寄存器将执行此操作。在Windows中,+*是等效的。在Unix中,+*之间存在细微差别:

Under Windows, the * and + registers
are equivalent. For X11 systems,
though, they differ. For X11 systems,
* is the selection, and + is the cut buffer (like clipboard).
http://vim.wikia.com/wiki/Accessing_the_system_clipboard

*可能是您大多数时候想要的,所以我使用*,因为它在两种环境中的功能与我预期的一样。

在Linux发行版中,出于某种原因,必须首先安装vim gtk才能获得剪贴板功能。

对于那些在拉或放时对如何使用寄存器感到困惑的人,你只需写下寄存器的名称"。因此,如果要将某个内容复制到剪贴板寄存器,请键入"*y,然后键入"*p


关于Mac OSX

  • 复制所选部分:视觉选择文本(正常情况下键入vv)模式)和类型:w !pbcopy

  • 复制整个文件:%w !pbcopy

  • 从剪贴板中粘贴:r !pbpaste

在大多数Linux发行版上,您可以替换:

  • 上面有xclip -i -sel cxsel -i -bpbcopy
  • 使用xclip -o -sel -cxsel -o -bpbpaste。--注意:如果这些工具(xselxclip都没有预装在您的发行版上,您可能会在repos中找到它们。


在VIMRC文件中,可以指定自动使用系统剪贴板进行复制和粘贴。

Windows集:

1
set clipboard=unnamed

在Linux上(VIM 7.3.74+):

1
set clipboard=unnamedplus

注意:您可能需要使用最新版本的VIM才能工作。

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


使用寄存器"+复制到系统剪贴板(即"+y而不是y)。

同样,您可以从"+粘贴以从系统剪贴板获取文本(即,"+p而不是p)。


@雅各布·道尔顿在一篇评论中提到了这一点,但似乎没有人在回答中提到Vim必须使用剪贴板支持进行编译,才能使这里提到的任何建议发挥作用。默认情况下,我的配置在MacOSX上不是那样的,我必须重新构建VIM。使用这个命令来确定您是否拥有它。+clipboard表示你很好,这里的建议对你有用,而-clipboard表示你必须重新编译和重建vim。


总结,让新手更容易,

要复制当前行,请在命令模式下键入:

1
"*yy

要复制整个文件/缓冲区,在命令模式下,首先通过gg转到开头,然后键入

1
"*yG

如前所述,这需要vim --version中的+clipboard,表示剪贴板支持的可用性,-clipboard表示没有。


我无法复制到我的剪贴板系统,因为我的~/.vimrc文件中有这个:

1
2
3
 if has('mouse')
   set mouse=a
 endif

但是,如果您下一步添加这一行,它将允许您简单地使用ctrl+c将所选内容放入剪贴板。

1
vmap <C-c>"+y

原始讨论和更多详细信息:启用set mouse=A从VIM中复制文本


如果您在MacOSX中使用VIM,不幸的是它附带了老版本的Verion,并且不符合剪贴板选项。幸运的是,自制啤酒可以很容易地解决这个问题。

安装VIM:

brew install vim --with-lua --with-override-system-vim

安装VIM的GUI版本:

brew install macvim --with-lua --with-override-system-vim

重新启动终端以生效。将以下行附加到~/.vimrcset clipboard=unnamed

现在您可以使用yy在vim中复制该行,并在系统范围内粘贴它。

更新方法:

多年来我一直对设置剪贴板的方法不满意。最大的缺点是,即使使用x进行删除,它也会破坏剪贴板的历史记录。这里有一个更好更优雅的解决方案。

  • 将VIM的文本[范围]复制到系统剪贴板中。(提示:使用vv首先选择范围,然后键入colon :激活ex命令)::[range]yank +例如。,:5,10y *(将5-10行复制/扬克到系统剪贴板*寄存器)

  • 将系统剪贴板中的内容粘贴到新行上的VIM中::put +


  • 我的解决方案是安装额外的VIM,其中包括剪贴板选项:

    1
    sudo apt-get install vim-gnome


    适用于Ubuntu-2018年7月

    使用寄存器"+复制到系统剪贴板(即"+Y而不是Y")。

    同样,您可以从"+粘贴以从系统剪贴板获取文本(即"+P而不是P")。

    您还必须确保VIM是在支持剪贴板的情况下编译的。尝试:

    1
    vim --version | grep .xterm_clipboard -o

    如果它是-xterm_剪贴板(一个减号前缀),那么您就没有支持。

    以下是一些关于与支持剪贴板的VIM工作版本交换的说明。

    • $sudo apt获取清除vim
    • $sudo apt get autoremove(删除任何来自系统的外来VIM依赖包)
    • $sudo apt get安装vim gnome

    使用vim --version | grep .xterm_clipboard -o再次检查,您可以确认剪贴板现在可用(即+xterm_剪贴板)

    祝你好运。


    如果您使用的是GVIM,您也可以使用cx1(16)。这将触发自动复制到剪贴板中您在视觉模式中突出显示的文本。缺点:请注意,高级剪贴板管理器(具有历史记录)在这种情况下将获取所有选择历史记录…


    你可以在这里找到答案拱形维基

    Linux:首先,您必须通过安装gvim

    接下来,您必须将这一行放到您的.vimrc文件中。

    set clipboard=unnamedplus


    如果您的vim恰好是在没有+xterm_clipboard选项的情况下编译的,就像在debian和我猜的ubuntu中默认的那样,那么您可以将选择或整个缓冲区通过管道传输到处理桌面剪贴板的外部程序。对于xclip(以前可能需要安装),命令将是:w !xclip -sel clip


    仅在Ubuntu终端下的VIM中,

    shift + drag mouse在vim中选择文本,然后按ctrl + shift + c在终端上选择文本。

    然后是其他编辑的ctrl + v


    如果使用xclip,将文本复制到剪贴板的简单方法如下:

  • 把你要复制的文本拉出来。(香草味中的y命令)
  • 键入:call system("xclip -selection clipboard", @")
  • :call system()运行终端命令。它需要两个参数,第一个是命令,第二个是管道到该命令的内容。例如,:echom system("head -1","Hello
    World")
    返回hello(带有一些填充)。echom返回命令的输出,而call则不返回。

    xclip -selection clipboard只是将文本复制到系统剪贴板,而不是默认的x剪贴板(通过中间的moue按钮访问)。

    @"返回最后一个被勾选的文本。"是默认寄存器,但可以使用任何寄存器。要查看所有寄存器的内容,请键入:registers


  • set clipboard=unnamed放在你的vimrc里。
  • Visual模式下选择要复制的内容(按v键进入)。
  • 回到Normal模式(按escape〔esc〕),按y复制。
  • 如果要从操作系统的剪贴板粘贴内容,请在vim Normal模式下按p/p。

  • 也许有人会发现它很有用。我想与X剪贴板保持独立,并且仍然能够在两个运行的VIMS之间复制和粘贴一些文本。这个小代码将所选文本保存在temp.txt文件中以便复制。将下面的代码放入.vimrc中。使用ctrl-c ctrl-v来完成此项工作。

    VNOMMAP:W!cp/dev/null~/temp.txt&;cat>~/temp.txt

    诺娜马克:R!CAT/TEMP.TXT


    我是VIM新手,但在正常模式下,将所有文本复制到系统剪贴板(例如,如果您想将其粘贴到字处理器或其他文本编辑器(如Gedit、MousePad等)中:

    GGVGY

    或者更简单地说:

    %y

    如建议,我还安装了VIM GTK和

    设置剪贴板=unnamedplus

    在我的VIMRC中

    一切都很好

    如果只想复制一部分文本,请使用视觉模式(v),选择要复制的文本,然后按y。

    最后,我建议使用剪贴板程序,比如clipman(我最喜欢)、clipit、parcellite或类似程序。

    (我在Debian Stretch XFCE中使用VIM 8.0)

    原谅我的英语!-)


    我在我的.vimrc中写了一行简单的代码来让拷贝工作。希望这能帮助别人。不幸的是,我的VIM没有安装剪贴板支持,所以这些建议对我来说都不起作用。基本上,将这一行粘贴到.vimrc中:

    1
    map <C-c> y:e ~/clipsongzboard<CR>P:w !pbcopy<CR><CR>:bdelete!<CR>

    如果你想详细了解它的作用,你可以在我的博客上阅读。


    如果您不想为VIM使用任何图形界面,并且您更喜欢使用终端仿真器,那么可能有一种更简单的方法来解决这个问题。不要使用Yank或类似的工具,首先查看您使用的终端文档。我一直在努力解决同一个问题(尝试使用+剪贴板和xclip等),最终发现,在我的终端模拟器中,只需按shift并选择任何要复制的文本就足够了。就是这样。非常简单,不需要破坏配置。(顺便说一下,我用的是URXVT)。


    对于某些国际键盘,您可能需要按"+spacebkbd才能获得"

    因此,在这种情况下,您必须按"space +y"space *y


    如果您通过Putty连接到Unix系统,那么按照以下步骤复制文件的内容

    • 突出显示要复制的文本(可以逐页复制)
    • 按ctrl+c(它将把文本复制到剪贴板
    • 粘贴到任何外部编辑器中多恩

    对于OSX,像上面所说的10342答案一样,您需要确保VIM支持剪贴板功能,说OSX附带的那个不支持剪贴板,如果您运行brew install vim会起作用的。

    但是,运行vi仍然会使您运行预装的OSX版本,而不是从BREW安装的版本。

    为了克服这个问题,我简单地将vim命令别名为BREW版本,而不是OSX默认版本:

    1
    alias vim="/usr/local/Cellar/vim/8.0.1100_1/bin/vim"

    现在我是金色的


    我有问题,因为我的VIM不支持剪贴板:

    1
    2
    3
    vim --version | grep clip
    -clipboard       +insert_expand   +path_extra      +user_commands
    +emacs_tags      -mouseshape      +startuptime     -xterm_clipboard

    我安装了vim gnome(支持剪贴板),然后再次检查:

    1
    2
    3
    vim --version | grep clipboard
    +clipboard       +insert_expand   +path_extra      +user_commands
    +emacs_tags      +mouseshape      +startuptime     +xterm_clipboard

    现在我可以分别使用"+Y"和"+P"进行复制和粘贴。


    几个月前,我一直在用键盘快捷键在MacOSX上解决这个问题。我知道问题不在于使用键盘短裤。但这可能会帮助有同样问题的人。

    我发现如果取消选中:

    View -> Allow Mouse Reporting

    在终端菜单中,您可以使用

    command + c

    再一次。


    mouseright-click copy的帮助下,selecting在我的案件中工作。

    我不想包括行号,所以我在copying之前加了:set nonumber


    在我的Windows笔记本电脑上,上面的任何东西对我都不起作用。

    ctrl+c可以复制。但我需要shift+insert粘贴!

    (一个很好的理由就是总是可以在不按辅助键的情况下访问insert的笔记本电脑)


    shift+ctrl+c如果您在Linux的图形模式下,但首先需要选择需要复制的内容。

    enter image description here