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

Har*_*non 692 vim clipboard

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

Gab*_*art 474

*寄存器将做到这一点.在Windows中,+并且*是等效的.在unix中,+和之间有一个微妙的区别*:

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

*可能是你大多数时候都想要的,所以我使用*它,因为它的功能与我在两种环境中的预期相同.

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

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

  • 对于那些在yanking或put时如何使用寄存器感到困惑的人,你只需要写"``然后写入寄存器的名称.所以为了将某些内容复制到剪贴板寄存器,你输入``*y`然后把你输入``*p` (323认同)
  • 如果你使用Linux,你应该`+`注册.例如,如果你想将三行复制到系统的剪贴板中,使用像`v3j"+ y`这样的命令,然后你可以将它们粘贴到另一个应用程序中更多的另一个VIM.在Linux下使用`*`寄存器只能在不同的文件夹之间复制和粘贴VIM应用程序. (58认同)
  • 您还必须确保编译vim并支持剪贴板.Ubuntu中的默认vim不是.尝试`vim --version | grep .xterm_clipboard -o`如果它是`-`那么你没有支持.根据http://ubuntuforums.org/showthread.php?t=1686955下载其他版本 (57认同)
  • 在mac osx lion上不起作用.在按下"然后*"之后,当你无法做某事时,它会使mac产生噪音.我如何在mac上做到这一点? (29认同)
  • weberc2和diabloneo,*寄存器用于选择剪贴板,可从中间点击访问,而不是菜单粘贴或^ V (11认同)
  • 在Linux上,*寄存器不适用于外部复制和粘贴. (4认同)
  • 在Ubuntu上,安装vim-gtk将启用+ clipboard和+ xterm_clipboard功能,然后你可以使用``+ y`将内容复制到系统剪贴板.在Chrome等其他程序中,你可以使用`Ctrl + v`粘贴如果使用"*y"来复制vim中的内容,则需要使用鼠标中键来粘贴内容. (3认同)
  • 另外,为什么默认情况下不使用系统剪贴板.你知道,因为它可以在VIM中运行,也可以在VIM之外运行... (2认同)

Bri*_*ian 323

在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),您可以在回购中找到它们

  • 兼容与mavericks osx一起提供的vim.添加到.vimrc```vnoremap <Cc>:w!pbcopy <CR> <CR> noremap <Cv>:r!pbpaste <CR> <CR>```要使用此映射,如果要复制,在可视模式下突出显示文本,然后按Ctrl-c进行复制.要从系统剪贴板粘贴,请按Ctrl-v. (24认同)
  • 在Linux上,这适用于:w!xclip -sel c或:w!xsel -b (6认同)
  • 对于Linux Ctrl + C copy:在〜/ .vimrc中添加:`vnoremap <CC>:w!xclip -i -sel c <CR> <CR>` (4认同)
  • 比接受的答案更有帮助的答案.谢谢! (3认同)
  • 我在 Mac 中,vim 显示 +clipboard 并且 `:w !pbcopy` 或 `:%w !pbcopy` 复制整个文件 (3认同)
  • 这为我复制了整行 (3认同)
  • 我制作了一个改进版本,允许仅复制部分行:https://vi.stackexchange.com/questions/26745/improve-copy-to-clipboard-using-xclip (2认同)

Gar*_*hby 150

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

在Windows上设置:

set clipboard=unnamed
Run Code Online (Sandbox Code Playgroud)

在Linux上设置(vim 7.3.74+):

set clipboard=unnamedplus
Run Code Online (Sandbox Code Playgroud)

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

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

  • 作为笔记的附录 - 您可能还需要安装额外的软件包才能使其正常工作.如果你的vim缺少`+ xterm_clipboard`功能(当你运行`vim --version`时可见).对我来说就是这种情况(运行Kubuntu 12.10).我必须安装`vim-gui-common`软件包才能获得正确的功能. (37认同)
  • `set clipboard = unnamed`适用于Mac OS 10.11.6(El Capitan)和vim 7.4 (3认同)
  • 您可能希望更新您的答案。它在带有 vim 8.0 的 Ubuntu 18.04 上不起作用。 (2认同)
  • `set Clipboard^=unnamed,unnamedplus` 将为 Windows 和 Linux 解决这个问题。不确定Mac。 (2认同)

Ama*_*9MF 119

使用寄存器"+复制到系统剪贴板(即"+y代替y).

同样,您可以粘贴"+以从系统剪贴板获取文本(即"+p代替p).

  • 双引号字符用作vi和vim中的寄存器选择器. (6认同)
  • @ dash-tom-bang:`+`/`*`的区别是`SELECTION` vs`PRIMARY`复制缓冲区(不记得哪个是哪个atm) (3认同)
  • 是的明星是选择,加上是剪贴板. (2认同)

gkb*_*986 68

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

  • 或者,您可以安装已经使用剪贴板支持构建的vim包,而不是自己编译.在OS X上,Homebrew有:`brew install vim`.在Ubuntu上,你可以使用`sudo apt-get install vim-gnome`.在其他(非GNOME)Linux发行版上,你可能宁愿安装`vim-gtk`或`vim-athena`. (14认同)
  • 谢谢,在Arch Linux中,我不得不删除`vim`并安装`gvim` https://wiki.archlinux.org/index.php/Vim#Installation (2认同)

rye*_*nus 55

总结并让新手更容易,

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

"*yy
Run Code Online (Sandbox Code Playgroud)

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

"*yG
Run Code Online (Sandbox Code Playgroud)

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

  • `"*5yy` 说 `5 行被猛拉`,但剪贴板中没有任何内容? os/x. (3认同)
  • 我安装了`vim-gtk`来将`-clipboard`变成`+ clipboard`,而不是``+ yy`正在工作. (3认同)
  • 是的我已经验证了+剪贴板 (2认同)
  • 最好的解决方案,在 Linux 上使用 `"+yG` 代替。 (2认同)

ano*_*ous 25

如果你在MAC OSX中使用vim,不幸的是它配备了较旧版本,并且没有符合剪贴板选项.幸运的是,自制软件可以轻松解决这个问题.

安装vim:

brew install vim

安装vim的gui:

brew install macvim

重启终端才能生效.


将以下行追加到〜/ .vimrc
set clipboard=unnamed

现在你可以在vim中复制该行yy并在系统范围内粘贴它.



更新方法:

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

  1. 将vim的文本[范围]复制到系统剪贴板中.(提示:首先使用vV选择范围,然后键入冒号:以激活Ex命令):
    :[line-range]yank +
    例如,
    :5,10y * (复制/抽取5-10行到系统剪贴板*寄存器)

  2. 将系统剪贴板中的内容粘贴到新行的vim中:
    :put +


arc*_*don 24

对于Ubuntu - 2018年7月

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

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

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

vim --version | grep .xterm_clipboard -o 
Run Code Online (Sandbox Code Playgroud)

如果它是-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)

祝好运.

  • 你创造了我的一天,也许是我的一个月.在Ubuntu上使用无剪贴板vim多年后,这是一种惊人的感觉.**arcseldon,谢谢!!** (3认同)
  • 除了上面描述的内容之外,我还必须将 `set Clipboard=unnamedplus` 放入我的 `.vimrc` 文件中才能进行复制。我使用的是 Ubuntu 18.04。 (3认同)

jca*_*llo 23

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

 if has('mouse')
   set mouse=a
 endif
Run Code Online (Sandbox Code Playgroud)

但是,如果您接下来添加此行,它将允许您简单地Ctrl+c将您选择的任何内容添加到剪贴板中.

vmap <C-c> "+y
Run Code Online (Sandbox Code Playgroud)

原始讨论和更多细节:使用set mouse = a从vim复制文本

  • 我没有将行添加到我的.vimrc中,但是您提供的链接非常有用.如果在vim中选择文本时按住SHIFT键,则无需进入可视模式即可复制文本.非常感谢和+1. (3认同)

Cir*_*四事件 21

键绑定使其更容易

我已经使用这些很多年了:

nnoremap Y "+y
vnoremap Y "+y
nnoremap yY ^"+y$
Run Code Online (Sandbox Code Playgroud)

您现在可以只使用大写字母Y复制到剪贴板,而小写字母y不会受到影响,例如 by set clipboard=unnamed,因此您仍然可以选择是否将副本复制到剪贴板。

在 ubuntu 21.04、vim 8.2 上测试。


Jos*_*dai 20

此答案特定于 MAC 用户。

MAC 可用的默认 VIM 没有启用剪贴板选项。您需要该选项才能访问系统剪贴板。

要检查您的 vim 是否启用了该选项,请使用以下命令

vim --version
Run Code Online (Sandbox Code Playgroud)

结果,你应该有+clipboard. 如果是-clipboard,则您的 VIM 没有访问系统剪贴板的选项。

你需要使用你需要的选项来制作和安装你的 VIM。以下是命令。

# Create the directories you need
$ sudo mkdir -p /opt/local/bin
# Download, compile, and install the latest Vim
$ cd ~
$ git clone https://github.com/vim/vim.git
$ cd vim
$ ./configure --prefix=/opt/local
$ make
$ sudo make install
# Add the binary to your path, ahead of /usr/bin
$ echo 'PATH=/opt/local/bin:$PATH' >> ~/.bash_profile
# Reload bash_profile so the changes take effect in this window
$ source ~/.bash_profile"
Run Code Online (Sandbox Code Playgroud)

以上将安装最新的 VIM 并+clipboard启用该选项。

现在您需要设置系统剪贴板。将以下行附加到~/.vimrc

set clipboard=unnamed
Run Code Online (Sandbox Code Playgroud)

现在您可以将文本拉到系统剪贴板。下面的步骤解释了如何猛拉。

  1. 在 vim 命令模式下press v,这会将您切换到 VISUAL 模式。
  2. 四处移动光标以选择需要复制的文本或行。
  3. Press y,这会将选定的文本复制到剪贴板。
  4. 转到任何外部应用程序并CMD + v粘贴。

我将 MACBook Pro 与 macOS Mojave 一起使用,上面的工作在其中。


小智 18

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

sudo apt-get install vim-gnome
Run Code Online (Sandbox Code Playgroud)

  • 这就是我对Ubuntu 16.04要做的事情。我尝试了其他建议,但没有成功。这是最简单的,并且达到了我对“ + y”的预期。 (3认同)

Ben*_*oit 14

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


小智 11

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

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


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

set clipboard=unnamedplus


Hna*_*att 10

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


Sup*_*nno 8

仅在ubuntu终端下的vim中,

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

然后ctrl + v在其他编辑

  • 这只能选择vim中的visual,如果你想选择整个文件怎么办? (3认同)
  • 这会复制行号、拆分的缓冲区边界以及所有可见的内容,而不仅仅是文本/代码。 (2认同)

Ber*_*oio 7

我是 Vim 新手,但是,要将所有文本复制到系统剪贴板(例如,如果您想将其粘贴到文字处理器或其他文本编辑器,如 gedit、鼠标垫等...),请在正常模式下:

GGGy

或者,更简单地说:

:%y

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

设置剪贴板=unnamedplus

在我的 .vimrc 中

一切正常

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

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

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

请原谅我的英语!:-)


小智 6

  1. 放入set clipboard=unnamed你的vimrc.
  2. Visual模式中选择要复制的内容(按 v 进入)。
  3. 返回Normal模式(按escape[esc]),按y 复制。
  4. 如果你想从操作系统的剪贴板粘贴一些东西,在 VimNormal模式下按 p/P 。


Joh*_*AZ1 6

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

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

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

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

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

  • 这更健壮,即使 vim 不符合对剪贴板和任何操作系统的支持,它也能工作。例如,在 Mac 上运行 ``:call system("pbcopy",@")``. 可以将此命令绑定到一个键。 (3认同)

小智 6

我的解决方案是将以下行添加到 .vimrc 中:

map <C-y> :w !xclip -sel c <CR><CR>
Run Code Online (Sandbox Code Playgroud)

该脚本使用 Ctrl + y 将选定的行(通过可视模式)或文件内容(如果未选择)复制到剪贴板。如果这很重要的话,我正在使用 Manjaro Linux。


GO'*_*GO' 5

几个月来,我一直在使用键盘快捷键在 MacOsX 上为此苦苦挣扎。我知道问题不是关于使用键盘短裤。但这可能会对有同样担忧的人有所帮助。

我发现如果你取消选中:

查看 -> 允许鼠标报告

从终端菜单,您将能够使用复制到剪贴板

command + c

再次。


Jog*_*mar 5

这个问题已经有很多答案了。我正在添加我认为很快的方式。

很快,您可以按V(Shift + v) 激活视觉模式。在可见模式下,您可以使用jk来选择要复制的文本。选择后,使用

"*y
Run Code Online (Sandbox Code Playgroud)

现在,选定的文本被复制到剪贴板。