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

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

*注册会这样做。 在Windows中, +*是等效的。 在unix中, +*之间有细微的差别:

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

*可能是你大部分时间想要的东西,所以我使用*是因为它在两个环境中的function都如我所愿。

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

在Mac OSX上

  • 复制选中的部分:直观地select文本(在正常模式下inputvV )并键入:w !pbcopy

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

  • 从剪贴板粘贴:r !pbpaste

大多数 Linux发行版中 ,您可以replace:

  • 使用xclip -i -sel c xsel -i -b xclip -i -sel cxsel -i -b
  • 使用xclip -o -sel -c xsel -o -b xclip -o -sel -cxsel -o -b
    注意: 如果您的发行版中没有预装这些工具( xselxclip ),则可以在repos中find它们

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

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

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

在Windows上设置:

 set clipboard=unnamed 

在Linux上(vim 7.3.74 +):

 set clipboard=unnamedplus 

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

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

总结和使新手更容易,

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

 "*yy 

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

 "*yG 

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

@Jacob Dalton在评论中提到了这一点,但似乎没有人在回答中提到vim必须使用剪贴板支持来编译这里提到的任何build议。 我没有在Mac OS X上configuration这种方式,我不得不重buildvim。 使用这个命令找出你是否有vim --version | grep 'clipboard' vim --version | grep 'clipboard'+clipboard意味着你很好,这里的build议将为你工作,而-clipboard意味着你必须重新编译和重buildvim。

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

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

但是如果你接下来添加这一行,它将允许你简单地按Ctrl + C来获得你已经select到你的剪贴板的任何东西。

 vmap <Cc> "+y 

原始的讨论和更多的细节: 复制文本出vim与设置鼠标=启用

如果你正在使用GVim,你也可以set guioptions+=a 。 这将触发自动复制到在视觉模式下突出显示的文本的剪贴板。
缺点:请注意,高级剪贴板pipe理器(包含历史logging)在这种情况下将获得您所有的select历史logging…

对我来说,解决scheme是安装附加的剪贴板选项的vim:

 sudo apt-get install vim-gnome 

如果您在MAC OSX中使用vim,不幸的是,它带有较旧的版本,而不符合剪贴板选项。 幸运的是,自制软件很容易解决这个问题。

安装vim:

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

安装vim的gui verion:

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

重启terminal生效。

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

现在你可以在vim中用yy复制该行,并将其粘贴到系统范围内。

更新方法

我从未满意多年来设置剪贴板方法。 最大的缺点是它会弄乱你的剪贴板的历史,即使你使用x删除。

这是一个更好的和优雅的解决scheme:

将vim的文本[范围]复制到系统剪贴板中。 (提示:用vV先select范围,然后input激活Ex命令)
:[范围] yank +

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

如果你的vim碰巧没有使用+xterm_clipboard选项编译,就像在Debian中默认的那样,我猜Ubuntu可以通过pipe道select或整个缓冲区来处理桌面剪贴板的外部程序。 对于xclip (您可能需要先安装),该命令将是:w !xclip -sel clip

也许有人会觉得它有用。 我想保持独立于X剪贴板,仍然能够复制和粘贴两个正在运行的vim之间的文本。 这个小代码将选定的文本保存在temp.txt文件中进行复制。 把下面的代码放到.vimrc中。 使用CTRL-c CTRL-v来完成这项工作。

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

noremap:r!cat〜/ temp.txt

在ubuntu下的vimterminal下,

shift + drag mouse在vim中select一个文本,然后在terminal上按ctrl + shift + c

然后在其他编辑器上按ctrl + v

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

 map <Cc> y:e ~/clipsongzboard<CR>P:w !pbcopy<CR><CR>:bdelete!<CR> 

如果您想详细了解这个function,可以在我的博客上阅读

对于一些国际键盘,您可能需要按 + 空格"

所以在这种情况下,你将不得不按 Space + y” Space * y”

  1. set clipboard=unnamed在您的vimrc
  2. Visual模式下select要复制的内容(按v进入)。
  3. 返回Normal模式(按Esc键退出),按y进行复制。
  4. 如果你想从操作系统的剪贴板上粘贴东西,在Vim Normal模式下按下p / P。

你可以在这里findArch Wiki的答案

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


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

set clipboard=unnamedplus

如果你不想为vim使用任何graphics界面,而且你更愿意坚持使用terminal模拟器,那么这个问题可能会简单得多。 首先看看你使用的terminal的文档,而不是使用任何类似的东西。 我一直在努力解决相同的问题(试图使用+剪贴板和xclip等),最后,在terminal仿真器中,只需按shift并select要复制的任何文本即可。 而已。 很简单,没有必要搞乱configuration。 (我用urxvt的方式)。

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

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

selectingmouse的帮助和right-click copy在我的情况下工作。

我不想包含行号,所以我:set nonumbercopying之前:set nonumber数字。

在我的Windows笔记本电脑上没有任何上述工作。

Ctrl + C是好的复制..但我需要Shift + 插入粘贴!

(总是有一台笔记本电脑的地方,总是可以访问插入,而无需按下辅助键)

对于OSX,就像上面的10342答案已经明确说明的那样,你需要确保vim支持剪贴板function,并说OSX预装的剪贴板不支持剪贴板,如果你运行brew install vim , 。

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

为了解决这个问题,我简单地将我的vim命令别名为brew版本,而不是OSX的默认版本:

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

现在我是金