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

问题描述 投票:641回答:27

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

vim clipboard
27个回答
444
投票

*注册将执行此操作。在Windows中,+*是等价的。在unix中,+*之间存在细微差别:

在Windows下,*和+寄存器是等效的。但是,对于X11系统,它们有所不同。对于X11系统,*是选择,+是剪切缓冲区(如剪贴板)。 http://vim.wikia.com/wiki/Accessing_the_system_clipboard

*可能是你大多数时候想要的,所以我使用*,因为它在两种环境中都能像我期望的那样运行。

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

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


15
投票

对于Ubuntu - 2018年7月

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

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

您还必须确保编译vim并支持剪贴板。尝试:

vim --version | grep .xterm_clipboard -o 

如果它是-xterm_clipboard(减去前缀),那么你没有支持。

以下是使用具有剪贴板支持的vim工作版本进行交换的一些说明。

  • $ sudo apt-get purge vim
  • $ sudo apt-get autoremove(从系统中删除任何无关的vim依赖包)
  • $ sudo apt-get install vim-gnome

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

祝好运。


14
投票

如果你正在使用GVim,你也可以使用set guioptions+=a。这将触发自动复制到您在可视模式下突出显示的文本的剪贴板。 缺点:请注意,在这种情况下,高级剪贴板管理器(具有历史记录)将获取所有选择历史记录...


10
投票

如果您的vim恰好在没有+xterm_clipboard选项的情况下编译,就像默认情况下在Debian中编译而我猜Ubuntu,您可以选择管道选择或整个缓冲区来处理桌面剪贴板的外部程序。对于xclip(您可能需要先安装),命令将为:w !xclip -sel clip


10
投票

你可以在这里找到答案Arch Wiki

对于Linux:首先,您必须通过安装gvim在vim版本中启用剪贴板。


接下来,您必须将此行放在.vimrc文件上。

set clipboard=unnamedplus


7
投票

仅在ubuntu终端下的vim中,

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

然后ctrl + v在其他编辑


5
投票

如果你有xclip,一种简单的方法将文本复制到剪贴板如下:

  1. 要复制的Yank文本。 (香草vim中的y命令)
  2. 输入:call system("xclip -selection clipboard", @")

:call system()运行终端命令。它需要两个参数,第一个是命令,第二个是管道到该命令的内容。例如,:echom system("head -1", "Hello\nWorld")返回Hello(带有一些填充)。 echom返回命令的输出,调用不返回。

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

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


4
投票

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

vnoremap:w!cp / dev / null~ / temp.txt && cat>〜/ temp.txt

noremap:r!cat~ / temp.txt


4
投票
  1. set clipboard=unnamed放在你的vimrc
  2. Visual模式中选择要复制的内容(按v进入)。
  3. 返回Normal模式(按escape [esc]),按y复制。
  4. 如果要从OS的剪贴板粘贴某些内容,请在Vim Normal模式下按p / P.

3
投票

我是Vim newby但是,要将所有文本复制到系统剪贴板(例如,如果你想将它粘贴到文字处理器或其他文本编辑器,如gedit,mousepad等...),在正常模式下:

ggVGy

或者,更简单地说:

:%和

按照建议,我还安装了vim-gtk并放了

设置clipboard = unnamedplus

在我的.vimrc中

一切正常

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

最后,我建议剪贴板程序,如Clipman(我最喜欢的),Clipit,Parcellite或类似的。

(我在Debian Stretch Xfce中使用vim 8.0)

原谅我的英语! :-)


2
投票

我在.vimrc中写了一个简单的行来进行复制工作。希望这有助于某人。不幸的是,我的vim没有安装剪贴板支持,所以这些建议都不适合我。基本上,将此行粘贴到.vimrc中:

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

如果您想阅读有关此功能的详细信息,可以在my blog上阅读此内容


292
投票

在Mac OSX上

  • 复制所选部分:直观地选择文本(在正常模式下键入vV)并键入:w !pbcopy
  • 复制整个文件:%w !pbcopy
  • 粘贴从剪贴板:r !pbpaste

在大多数Linux Distros上,您可以替换:

  • pbcopy以上与xclip -i -sel cxsel -i -b
  • pbpaste使用xclip -o -sel -cxsel -o -b - 注意:如果您的发行版中没有预安装这些工具(xselxclip),您可以在回购中找到它们

2
投票

对于某些国际键盘,您可能需要按“+空格来获得"

所以在这种情况下你必须按“Space + y或”Space * y


2
投票

如果您不想为vim使用任何图形界面,并且您更喜欢坚持使用终端仿真器,那么可能会有一个更简单的方法来解决这个问题。不要使用yank或类似的东西,首先看一下你使用的终端文档。我一直在努力解决同样的问题(尝试使用+剪贴板和xclip等),最后我发现在我的终端模拟器中只需按shift并选择你要复制的任何文本就足够了。而已。非常简单,不需要搞乱配置。 (我顺便使用urxvt)。


1
投票

如果您通过putty连接到unix系统,请按照以下步骤复制文件的内容

  • 突出显示要复制的文本(您可以逐页复制)
  • 按ctrl + c(它会将文本复制到剪贴板
  • 粘贴在任何外部编辑器完成

1
投票

对于OSX,就像上面提到的10342答案一样,你需要确保vim支持剪贴板功能,说OSX预先附带的那个不支持剪贴板,如果你运行brew install vim它会工作。

除了运行vi仍然会让你运行preshipped OSX版本,而不是你从brew安装的版本。

为了克服这一点,我简单地将我的vim命令别名为brew版本,而不是OSX默认版本:

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

现在我是金色的


1
投票

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

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

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

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

现在我可以分别使用“+ y和”+ p进行复制和粘贴。


0
投票

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

我不想要包含行号,所以我在:set nonumber之前copying


0
投票

我的Windows笔记本电脑上面没有任何上述功能。

Ctrl + C可以复制..但我需要Shift + Insert来粘贴!

(一个很好的理由总是得到一台笔记本电脑,无需按下辅助键即可访问Insert)


0
投票

如果您处于Linux的图形模式,请按Shift + Ctrl + C,但首先需要选择需要复制的内容。

enter image description here


141
投票

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

在Windows上设置:

set clipboard=unnamed

在Linux上设置(vim 7.3.74+):

set clipboard=unnamedplus

注意:您可能需要使用最新版本的Vim才能使用这些版本。

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


114
投票

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

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


66
投票

@Jacob Dalton在评论中提到了这一点,但似乎没有人在答案中提到vim必须使用剪贴板支持编译,以便提供此处提到的任何建议。默认情况下我没有在Mac OS X上配置我的方式,我不得不重建vim。使用此命令来确定您是否拥有它vim --version | grep 'clipboard'+clipboard意味着你很好,这里的建议对你有用,而-clipboard意味着你必须重新编译和重建vim。


52
投票

总结并让新手更容易,

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

"*yy

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

"*yG

如上所述,这需要+clipboard vim --version,这表明剪贴板支持的可用性,-clipboard意味着没有。


23
投票

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

 if has('mouse')
   set mouse=a
 endif

但是,如果您接下来添加此行,它将允许您只需按Ctrl + c即可将您选择的任何内容添加到剪贴板中。

vmap <C-c> "+y

原始讨论和更多细节:Copy text out of vim with set mouse=a enabled


20
投票

如果您在MAC OSX中使用vim,不幸的是它附带旧版本,并且不符合剪贴板选项。幸运的是,自制软件可以轻松解决这个问题。

安装vim:

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

安装gui版的vim:

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

重启终端才能生效。 将以下行追加到〜/ .vimrc set clipboard=unnamed

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

更新方法:

多年来我一直对set clipboard方法感到满意。最大的缺点是它会弄乱你的剪贴板历史记录,即使你使用x进行删除也是如此。这是一个更好,更优雅的解决方案。

  1. 将vim的文本[范围]复制到系统剪贴板中。 (提示:首先使用vV选择范围,然后键入冒号:以激活Ex命令): :[range]yank + 例如。, :5,10y *(复制/ yank行5-10到系统剪贴板*注册)
  2. 将系统剪贴板中的内容粘贴到新行的vim中: :put +

18
投票

我的解决方案是安装包含剪贴板选项的附加vim:

sudo apt-get install vim-gnome
© www.soinside.com 2019 - 2024. All rights reserved.