如何在vim中将选定的行复制到剪贴板

114

如何在 vim 中将选定的行复制到剪贴板。我知道如何对于所有文本文件来做,但我想只针对选中的行复制。 谢谢!


相关链接:https://dev59.com/I2sz5IYBdhLWcg3wv6fu,https://dev59.com/SG865IYBdhLWcg3wIrJg - eckes
请参见http://vim.wikia.com/wiki/Cut/copy_and_paste_using_visual_selection,了解有关使用可视化选择进行剪切/复制和粘贴的内容。 - laike9m
注意:如果你的vim没有剪贴板支持,请使用命令vim --version | grep clip进行检查。如果不支持,唯一的解决方案是卸载vim并安装gvim,然后像平常一样使用vim。vim - Phani Rithvij
12个回答

144

SHIFTV可以进入选择行模式。然后使用"+y将当前选定的行复制到剪贴板中的+寄存器中。有相当多的不同寄存器,用于不同目的。有关Windows和Linux上*+寄存器之间差异的详细信息,请参见选择和放置寄存器部分。请注意,在X11系统中只有"*和"+之间存在区别。在MS-Windows下,"*和"+实际上是同义词,均指gui-clipboard。因此,在Windows上也可以使用*(sharp)寄存器:"*y


16
在Linux系统中,+ 代表全局剪贴板,* 代表选择剪贴板;而在Windows系统中,这两者都表示全局剪贴板。 - Mohnish
这对我来说在选择几行时有效,但当我选择多个页面的行并尝试使用"+y时,这些行不会被复制到剪贴板。 - Lonnie Best

80
如果您正在使用 Linux 并且正在使用 Vim 7.3.74 或更高版本(从 Ubuntu 11.10 开始安装的版本满足此要求),则可以执行以下操作:
``` set clipboard=unnamedplus ```
这将把复制的文本放入全局剪贴板,并允许您从全局剪贴板粘贴,无需使用任何特殊寄存器。与 ldigas 的解决方案不同,这也适用于非 GUI 版本的 Vim。

8
只有安装vim-gnome软件包而不是vim才能使此功能正常运行。 - dan-klasson
5
这个选项需要支持剪贴板的vim编译版本。你可以通过输入“vim --version | grep“+xterm_clipboard””来检查是否符合要求。 - BenC
1
这似乎可以用于复制到其他非vim程序,但是当我进入vim的插入模式并使用“shift + insert”从剪贴板粘贴时,只有前两行被粘贴... 我安装了vim-gnome; 我还缺少其他东西吗? - t2k32316
4
如果你使用的是 macOS 系统,可能需要使用 clipboard=unnamed (http://vim.wikia.com/wiki/Accessing_the_system_clipboard)来进行操作。 - streof

14
对于GVIM而言,按下v以进入可视模式;选择文本后按下Ctrl+Insert将选择内容复制到全局剪贴板中。
从菜单中可以看到快捷键为"+y,即按住Shift键,然后按下"+,释放Shift并按下y(与Shift+Insert相比较繁琐)。

为什么这个答案不受欢迎?:( - Ankit Shubham

13
set guioptions+=a

简而言之,每当您选择/拷贝某个内容时,也将其放入剪贴板中(不是Vim的剪贴板,而是窗口系统的全局键盘)。这样,您就不必考虑将内容拷贝到特殊寄存器中。


4
这条建议适用于哪些操作系统和/或 Vim 版本? - Nathan Basanese

11

首先检查您的vim安装是否支持剪贴板。

vim --version

如果已安装剪贴板支持,您将看到:

+clipboard
+X11
+xterm_clipboard

如果未安装剪贴板支持,您将会看到:
-clipboard
-X11
-xterm_clipboard

安装剪贴板支持:

apt-get install vim-gnome

确认已安装剪贴板支持后,请执行以下操作:

  1. 将光标定位到要复制的第一行。
  2. 按下 Shift+v 进入可视模式。
  3. 按下 选择多行文本。
  4. 按下 "+++y 将所选文本复制到系统剪贴板。
  5. 现在可以将所选文本复制到浏览器、文本编辑器等中。
  6. 如果想将系统剪贴板中的文本复制到 vim,请按下 "+++p

如果你需要反复地在 vim 和系统剪贴板之间进行复制,上述步骤可能会变得繁琐。 你可以创建 vim 快捷键,在按下 Ctrl+c 后将选定的文本复制到系统剪贴板。而当你按下 Ctrl+p 时,系统剪贴板中的文本就会被复制到 vim 中。创建快捷键的方法如下:

  1. Open .vimrc file and add following text at the end of file:

     nnoremap <C-c> "+y
     vnoremap <C-c> "+y
     nnoremap <C-p> "+p
     vnoremap <C-p> "+p
    
  2. Save and reload your .vimrc to apply the new changes.

  3. Position your cursor to the first line you want to copy.

  4. Press Shiftv to enter visual mode.

  5. Press to select multiple lines

  6. Press Ctrlc to copy the selected text to system clipboard.

  7. Now you can copy the selected text to browser, text editor etc.

  8. Press Ctrlp if you want to copy system clipboard text to vim.

注意:本文适用于Ubuntu系统。

在更新的Ubuntu/Mint版本中,可以使用命令“sudo apt-get install vim-gtk3”安装Vim-GTK3。 - Roman M

7

如果你还没有安装"xclip",请先安装...

sudo apt-get install xclip

Xclip将数据放入 "选择/突出显示" 剪贴板,你可以用中键点击进行粘贴,而不是使用 "ctrl + v"。

在vim命令模式下使用ex命令:

7w !xclip

或者

1,7w !xclip

或者

%w !xclip

然后只需中键单击即可将文本粘贴到任何其他应用程序中...

我必须使用 xclip -selection clipboard - dtrckd

6
如果您在MAC OSX中使用vim,不幸的是它自带较旧的版本,并且没有编译剪贴板选项。幸运的是,homebrew可以轻松解决这个问题。
安装vim:
brew install vim --with-lua --with-override-system-vim
安装vim的GUI版本:
brew install macvim --with-lua --with-override-system-vim
重新启动终端以生效。
在~/.vimrc文件末尾添加如下行:
set clipboard=unnamed
现在您可以在vim中使用"yy"复制一行并粘贴到整个系统中。

// 我刚在OSX 10.12.3上测试了一下,按照你在这里的建议安装了最新版本的Vim和最新的GUI版本,它正常工作了。谢谢,@anonymous。 - Nathan Basanese

4
如果使用具有剪贴板支持的vim,那么您可以使用"*y来将可视选择的文本复制到寄存器*('*'表示剪贴板)。
如果没有剪贴板支持,则在vim中可视选择文本后,我认为唯一的另一种方法是使用Ctrl+Insert

3
我已经将以下行添加到我的.vimrc文件中。
vnoremap <F5> "+y<CR>

按下F5键可以将所选文本复制到剪贴板中。需要在可视模式下才能使用此功能。


1
~/.vimrc中添加。谢谢,这样更好了。 - jaggedsoft
对我不起作用 - Phani Rithvij

2
将以下代码添加到您的.vimrc文件中:
if has('clipboard')
    if has('unnamedplus')  " When possible use + register for copy-paste
        set clipboard=unnamed,unnamedplus
    else         " On mac and Windows, use * register for copy-paste
        set clipboard=unnamed
    endif
endif

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接