是否可以直接从VIM复制到剪贴板?yy只将内容复制到vim的内部缓冲区。我想复制到操作系统的剪贴板。在维姆身上有没有这样的命令,或者你只能在维姆身上猛拉东西?
- 请看投票不足的答案,它澄清了一个重要事实:您必须让vim使用+剪贴板功能进行编译,以使下面的任何建议首先生效!这不是大多数系统的默认值。
- @Neiltraft,一些答案建议从VIM到外部程序的管道连接,所以任何答案都需要+剪贴板标志的说法是错误的。只是为了避免未来读者的困惑。
- 如何使vim从(和复制到)系统剪贴板中粘贴的可能副本?(注:另一个问题比较新,但有更好的答案,imho,我为什么把这个问题标为dupe)
- 在应用下面的这些命令之前,请确保您已经完成了sudo apt-get install vim-gnome,否则您将收到无效的寄存器错误!
- @Harnirvier对于这里的许多读者来说,vim-gnome可能是杀伤力过大,或者只是在OS/distro中不可用,而我怀疑vim-gtk和vim-gtk3更可能存在并减少依赖项,同时仍然提供剪贴板集成(至少对于那些仍然在x11上的读者而言,我不确定这两者是如何交互的)与Wayland)。
- 另请参见vi.stackexchange.com/questions/84/…
*寄存器将执行此操作。在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。
- 对于那些在拉或放时对如何使用寄存器感到困惑的人,你只需写下寄存器的名称"。因此,如果要将某个内容复制到剪贴板寄存器,请键入"*y,然后键入"*p。
- 不适用于Mac OSX Lion。按下"then*"后,当你做不到某件事时,它会发出Mac发出的噪音。我在Mac上怎么做?
- 您还必须确保VIM是在支持剪贴板的情况下编译的。Ubuntu中的默认vim不是。试试vim --version|grep .xterm_clipboard -o,如果是-,你就没有支持了。是否按照ubuntuforums.org/showthread.php下载其他版本?t=1686955
- 如果您使用的是Linux,那么应该注册+。例如,如果您想将三行复制到系统的剪贴板中,可以使用诸如v3j"+y之类的命令,然后您可以将它们粘贴到另一个应用程序中,更多的是另一个vim。在Linux下使用*寄存器只能在不同的VIM应用程序之间复制和粘贴。
- 在Linux上,*寄存器不适用于外部复制和粘贴。
- 另外,为什么默认情况下不使用系统剪贴板。你知道,因为它在Vim中工作,在它之外也工作…
- weberc2和diabloneo,*寄存器用于选择剪贴板,可通过鼠标中键访问,而不是菜单粘贴或^v
- 顺便说一下,您需要检查VIM是否使用+剪贴板功能编译。在Ubuntu上,您可以安装vim gnome以获得此功能。
- @sparhawk Ubuntu论坛的线程帖子现在已经过时了——Ubuntu上的"巨大的vim"配置现在带有"-xterm_剪贴板"。
- @Jamesc谢谢你的信息。我换过发行版,但我似乎记得安装了gvim。我不确定这是否可行。
- 不是一个理想的提问地点,但有人在(GNU-)屏幕上为VIM工作吗?我无法复制它,默认的screen copy方法不适用于split vim窗口中的多行:-/。
- 在Ubuntu上,install vim gtk将启用+clipboard和+xterm_clipboard功能,然后可以使用"+y将内容复制到系统剪贴板。在其他程序(如chrome)中,可以使用Ctrl+v粘贴内容。如果使用"*y复制vim中的内容,则需要使用鼠标中键粘贴内容。
- 我有带VIM 8.1的Ubuntu 16.04(2018年5月)。埃多克斯一〔25〕为我工作,但埃多克斯一〔17〕不为我工作。
- 对于Ubuntu18,04来说,点击鼠标中键通常不起作用,尤其是在尝试在Chrome中粘贴密码时。使用"+Y"一直有效。对于粘贴到vim select中,然后在vim"*p中键单击works中,源不需要复制命令,只需要选择。
- 为了便于使用,我将这个命令映射到VIMRC上的nnoremap c"*y和nnoremap v"*p。这可以更改为系统接受的内容。使其更容易记住命令并与外部世界交互:)
关于Mac OSX
在大多数Linux发行版上,您可以替换:
- 上面有xclip -i -sel c或xsel -i -b的pbcopy。
- 使用xclip -o -sel -c或xsel -o -b的pbpaste。--注意:如果这些工具(xsel和xclip都没有预装在您的发行版上,您可能会在repos中找到它们。
- +1与lion合作,虽然vim --version显示-clipboard
- 与Mavericks OSX附带的VIM兼容。添加到.vimrc vnoremap :w !pbcopy noremap :r !pbpaste中以使用此映射,如果要复制,请在视觉模式中突出显示文本,然后单击ctrl-c进行复制。要从系统剪贴板粘贴,请按ctrl-v。
- 到目前为止,这种方法的唯一问题是粘贴会中断格式设置(MacOSXMavericks)。似乎Mavericks搞乱了我的VIM安装:-)如果在可视模式下使用pbcopy和pbpaste,没关系,但是如果在不破坏格式的情况下不能使用pbcopy和command+v
- 在Linux上,它与:w!xclip-选择c或:w!XSEL-B
- 嗨,@zeus77,谢谢你的信息。我想更新答案。你能告诉我如何从Linux的剪贴板中过去吗?或者您可以自己编辑答案,如果您想:)
- @布莱恩我编辑了答案:)
- 对于Linux ctrl+c copy:in~/.vimrc add:vnoremap :w !xclip -i -sel c。
- 比公认的答案更有帮助。谢谢您!
- 我在Mac,Vim显示+剪贴板,或者是:w !pbcopy或者:%w !pbcopy复制整个文件。
- @在正常模式下,Davidtingsu的键绑定将与冲突,进入可视块选择模式。将其限制为插入模式也与插入文本字符序列冲突。
- @Zeus77 Xcopy&xsol不适合我。它们复制文件的所有内容。我在Ubuntu上使用VIM 8.0
- @Mortezae把这个加到你的vimrc set clipboard=unnamed,unnamedplus上。这将使用操作系统剪贴板进行vim的扬克操作。然后你就可以选择在视觉模式和扬任何你想要的。
- @宙斯77不起作用,但并不重要。谢谢
- @Mortezae要使其工作,您需要使用支持剪贴板的VIM构建。在Linux上可以是gvim、vim-gnome或vim-athena。
- 这是验证剪贴板支持的方法:vim.wikia.com/wiki/…
- 哦,我不知道。我用的是Vim。谢谢您
在VIMRC文件中,可以指定自动使用系统剪贴板进行复制和粘贴。
Windows集:
在Linux上(VIM 7.3.74+):
1
| set clipboard=unnamedplus |
注意:您可能需要使用最新版本的VIM才能工作。
http://vim.wikia.com/wiki/accessing_the_system_clipboard
- 作为注释的补充-您可能还需要安装额外的软件包才能使其正常工作。如果VIM缺少+xterm_clipboard功能(运行vim --version时可见)。这就是我的情况(运行kubuntu 12.10)。我必须安装vim-gui-common包才能获得正确的功能。
- 是否有该命令的Mac版本?
- set clipboard=unnamed在Mac OS 10.11.6(El Capitan)和VIM 7.4中工作
- 1。拖动时复制2。鼠标选择,通过在~/.vimrc文件set mouse=v和set clipboard=unnamed中指定以下命令,在mac塞拉-10.12.6和vim版本8.0.1800中工作。
使用寄存器"+复制到系统剪贴板(即"+y而不是y)。
同样,您可以从"+粘贴以从系统剪贴板获取文本(即,"+p而不是p)。
- 我用"*",但似乎X中只有一个区别。
- @Dash Tom Bang:+和*的差异是SELECTION和PRIMARY拷贝缓冲区(不记得是哪个ATM)
- 是的,星是选择,加上剪贴板。
- "是什么意思?
- 双引号字符用作vi和vim中的寄存器选择器。
- 两组要记住的快捷方式:EDOCX1(复制行到剪贴板)和EDOCX1(复制行到选择);EDOCX1(从剪贴板粘贴)和EDOCX1(从选择粘贴)。"是选择默认为vim自己的内部寄存器的寄存器(yy和p在不引用任何类型的寄存器的情况下工作)。PS:我想知道Vim自己的内部寄存器是否有一个字符,比如"&yy,默认情况下会变成yy。
- 我还记得,在VIM中,您可以有许多内部寄存器,并将它们分配给字母(我认为复制到a寄存器类似于"ayy,但我对此知之甚少:(
- 这就是我所使用的(MacOS v.10.12.6),它工作得很好。希望这更高一点,因为对于Mac用户来说,这是一个不那么复杂的答案。
@雅各布·道尔顿在一篇评论中提到了这一点,但似乎没有人在回答中提到Vim必须使用剪贴板支持进行编译,才能使这里提到的任何建议发挥作用。默认情况下,我的配置在MacOSX上不是那样的,我必须重新构建VIM。使用这个命令来确定您是否拥有它。+clipboard表示你很好,这里的建议对你有用,而-clipboard表示你必须重新编译和重建vim。
- 或者,您可以安装一个已经用剪贴板支持构建的VIM包,而不是自己编译。在OSX上,自制的有:brew install vim。在Ubuntu上,您可以使用sudo apt-get install vim-gnome。在其他(非GNOME)Linux发行版上,您可能更愿意安装vim-gtk或vim-athena。
- 谢谢,在arch linux中,我必须删除vim,安装gvimwiki.archlinux.org/index.php/vim安装
- 你的答案解释了为什么Yank不使用剪贴板,仅凭你的信息,我就可以做一个更好的谷歌搜索,使它更容易工作。现在它开始工作了。如果你的答案中也包含@neiltraft评论,这样人们就不需要进行谷歌搜索了,那就更好了。
- 在Mac上,在brew install vim之后,我把set clipboard=unnamed添加到.vimrc中。在命令行中运行source ~/.vimrc。在.bash配置文件中,我添加了alias vim="/usr/local/bin/vim",然后运行source ~/.bash_profile。现在在VIM中,只需使用y和p来复制/粘贴
总结,让新手更容易,
要复制当前行,请在命令模式下键入:
要复制整个文件/缓冲区,在命令模式下,首先通过gg转到开头,然后键入
如前所述,这需要vim --version中的+clipboard,表示剪贴板支持的可用性,-clipboard表示没有。
- "*5yy说5 lines yanked但剪贴板上什么都没有?OS/X。
- 是的,我已经验证了+剪贴板
- 这对我很有用:)
- .vimrc中的nnoremap c"*工作得很好,它是一种"复制"类型,然后通过一个动作将要复制到OS剪贴板中的文本对象抓取。
- 谢谢,你完全按照我需要的方式解释了。
- 我安装了vim-gtk把-clipboard变成+clipboard,而"+yy工作正常。
- 在Linux上,最好的解决方案是使用"+yG。
- 对于Mac用户,您可以通过自制安装以使+剪贴板工作。然后关闭终端并重新打开。当您键入vim --version时,现在应该显示+剪贴板。
我无法复制到我的剪贴板系统,因为我的~/.vimrc文件中有这个:
1 2 3
| if has('mouse')
set mouse=a
endif |
但是,如果您下一步添加这一行,它将允许您简单地使用ctrl+c将所选内容放入剪贴板。
原始讨论和更多详细信息:启用set mouse=A从VIM中复制文本
- 我没有在我的.vimrc中添加行,但您提供的链接非常有用。如果在VIM中选择文本时按住SHIFT,则可以在不进入视觉模式的情况下复制文本。所以,谢谢和+1。
- 轮班技巧是我需要的。在提示中使用ctrl+shift+c进行复制的编辑器(如terminator)也可以使用,这是我最初尝试的方法。我确实安装了-xterm_剪贴板和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的文本[范围]复制到系统剪贴板中。(提示:使用v或v首先选择范围,然后键入colon :激活ex命令)::[range]yank +例如。,:5,10y *(将5-10行复制/扬克到系统剪贴板*寄存器)
将系统剪贴板中的内容粘贴到新行上的VIM中::put +
- --with-override-system-vim应为--with-override-system-vi。
- 我想尝试这样做以避免在最小系统上安装大量的xorg东西,但我遗漏了一些东西。在V模式下选择然后点击":"后,我得到"不是编辑器命令[范围]扬克+"。
- +jeremyjjbrown命令中不需要[range]。在V模式下选择,然后点击":"后,只需输入"Yank+"。只有当包含+剪贴板功能时,才可以拖动到"*或"+寄存器。使用以下命令查看更多信息:h:yank
我的解决方案是安装额外的VIM,其中包括剪贴板选项:
1
| sudo apt-get install vim-gnome |
- 这是我为Ubuntu16.04所做的。我尝试了其他的建议,但没有成功。这是最简单的方法,我用"+Y"做了我所期望的。
- 在Ubuntu 16.04没有为我工作
- 它就像一个没有任何VIMRC变化的魅力!在Ubuntu 16.04中仍然有效
- "+y建议只对vim-gnome起作用。使用Linux Mint 18.2。
适用于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_剪贴板)
祝你好运。
- 你成就了我的一天,或许是我的一个月。在Ubuntu上用了多年的无剪贴板VIM,这是一种令人惊奇的感觉。Arcseldon,谢谢!!
如果您使用的是GVIM,您也可以使用cx1(16)。这将触发自动复制到剪贴板中您在视觉模式中突出显示的文本。缺点:请注意,高级剪贴板管理器(具有历史记录)在这种情况下将获取所有选择历史记录…
你可以在这里找到答案拱形维基
Linux:首先,您必须通过安装gvim。
接下来,您必须将这一行放到您的.vimrc文件中。
set clipboard=unnamedplus
- +1,很惊讶现在需要这个步骤。在我以前的所有拱门安装中,我都不必这么做。
- 也为Ubuntu 18.04工作,在TMUX中运行。谢谢!
如果您的vim恰好是在没有+xterm_clipboard选项的情况下编译的,就像在debian和我猜的ubuntu中默认的那样,那么您可以将选择或整个缓冲区通过管道传输到处理桌面剪贴板的外部程序。对于xclip(以前可能需要安装),命令将是:w !xclip -sel clip。
- 多谢你的帮助-我在Ubuntu上已经很久没用了(所以确认你的Ubuntu猜测是正确的),我不知道为什么。现在我可以在vim --version所示的标记中看到-xterm_clipboard。
- 这帮助我找到了剪贴板支持的好来源:vimcasts.org/blog/2013/11/getting-vim-with-clipboard-support
仅在Ubuntu终端下的VIM中,
按shift + drag mouse在vim中选择文本,然后按ctrl + shift + c在终端上选择文本。
然后是其他编辑的ctrl + v。
- 这只适用于选择VIM中可见的内容,如果您想选择整个文件呢?
- @gerep此方法不适用于整个文件选择。最好只在VIM终端上选择一部分文本,并在终端屏幕上显示文本。
- 这将复制行号、拆分的缓冲区边框以及所有可见的内容,而不仅仅是文本/代码。
如果使用xclip,将文本复制到剪贴板的简单方法如下:
把你要复制的文本拉出来。(香草味中的y命令)
键入:call system("xclip -selection clipboard", @")
:call system()运行终端命令。它需要两个参数,第一个是命令,第二个是管道到该命令的内容。例如,:echom system("head -1","Hello
World")返回hello(带有一些填充)。echom返回命令的输出,而call则不返回。
xclip -selection clipboard只是将文本复制到系统剪贴板,而不是默认的x剪贴板(通过中间的moue按钮访问)。
@"返回最后一个被勾选的文本。"是默认寄存器,但可以使用任何寄存器。要查看所有寄存器的内容,请键入:registers。
- 这是更强大的,即使VIM不符合对剪贴板和任何操作系统的支持,它也能工作。例如,在Mac上运行:call system("pbcopy",@")。可以将此命令绑定到键。
把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> |
如果你想详细了解它的作用,你可以在我的博客上阅读。
- 买主当心。在Mac上,这有奇怪的效果。
- 当按照指示使用时(在Linux Ubuntu 16.04上,不支持剪贴板),这似乎不会将任何内容复制到剪贴板,并且如果在VIM会话中打开多个文件,将关闭执行操作的选项卡(Visual Select和C-C)。
如果您不想为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
再一次。
在mouse和right-click copy的帮助下,selecting在我的案件中工作。
我不想包括行号,所以我在copying之前加了:set nonumber。
- 你怎么能在Nerdtree里做到这一点?
- 这与VIM无关,只是一个基于终端的复制到(X)剪贴板。
- 我不确定@ji ruh
在我的Windows笔记本电脑上,上面的任何东西对我都不起作用。
ctrl+c可以复制。但我需要shift+insert粘贴!
(一个很好的理由就是总是可以在不按辅助键的情况下访问insert的笔记本电脑)
shift+ctrl+c如果您在Linux的图形模式下,但首先需要选择需要复制的内容。