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

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

777439 次浏览

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

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

*寄存器将执行此操作。在Windows中,+*是等效的。在unix中,+*之间存在细微差异:

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

*可能是您大多数时候想要的,所以我使用*是因为它在两种环境中的功能都符合我的期望。

在Linux发行版中,您必须先安装vim-gtk(又名gvim)才能获得剪贴板功能。这是因为非gtk vim通常在没有X11支持的情况下编译。这是为了允许它仅在控制台机器(通常是服务器)上运行。

对于那些不知道如何在拉或放时使用寄存器的人来说,你只需在寄存器的名称之后写"。因此,要将某些内容复制到剪贴板寄存器,请键入"*y,然后键入"*p(信用:Kyle Mathews)

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

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

 if has('mouse')set mouse=aendif

但是,如果您接下来添加这一行,它将允许您简单地Ctrl+c将您选择的任何内容放入剪贴板。

vmap <C-c> "+y

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

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

在macOS和Windows设置上:

set clipboard=unnamed

在Linux集(vim 7.3.74+):

set clipboard=unnamedplus

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

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

在MacOSX

  • 复制选定部分:直观地选择文本(正常情况下键入vV)mode)和类型:w !pbcopy

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

  • 从剪贴板粘贴:r !pbpaste

大多数Linux发行版上,您可以替换:

  • pbcopy以上xclip -i -sel cxsel -i -b
  • pbpaste使用xclip -o -sel -cxsel -o -b
    --备注:如果这些工具(#0和#1)都没有预安装在您的发行版上,您可能会在repos中找到它们

@Jacob Dalton在评论中提到了这一点,但是似乎没有人在回答中提到vim必须在剪贴板支持下编译才能正常工作。默认情况下,我的在Mac OS X上没有这样配置,我不得不重建vim。使用这个命令来确定你是否拥有它vim --version | grep 'clipboard'+clipboard意味着你很好,这里的建议对你有用,而-clipboard意味着你必须重新编译和重建vim。

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

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

如果您想了解有关此功能的详细信息,您可以在我的博客上阅读此内容

总结并使新手更容易,

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

"*yy

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

"*yG

如前所述,这需要vim --version中的+clipboard,这表示剪贴板支持的可用性,-clipboard表示否。

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

对我来说,解决方案是安装额外的vim,其中包括剪贴板选项:

sudo apt-get install vim-gnome

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

/dev/null~/temp.txt&&cat>~/temp.txt

#r! cat~/temp.txt

对于一些国际键盘,您可能需要按+空间才能获得"

因此,在这种情况下,您必须按空间+y空间*y

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

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

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

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

如果您使用的是vim in和旧版本的macOS,不幸的是,附带的vim版本可能不会使用剪贴板选项编译。幸运的是,自制可以轻松解决这个问题。

  • 安装vim:

    brew install vim
  • 安装vim的GUI版本:

    brew install macvim
  • 重新启动终端以生效。

  • 将以下行附加到~/.vimrc

    set clipboard=unnamed
  • 现在您可以使用yy复制vim中的行并将其粘贴到系统范围内。

更新方法

多年来我一直不满意设置剪贴板方法。最大的缺点是它会弄乱您的剪贴板历史记录,即使您使用x进行删除。这里有一个更好、更优雅的解决方案。

  1. 将vim的文本[范围]复制到系统剪贴板中。(提示:先使用vV选择范围,然后键入冒号:激活Ex命令):

    :[line-range]yank +

    例如,要将5-10行复制/输出到系统剪贴板*注册使用:

    :5,10y *
  2. 将系统剪贴板中的内容粘贴到vim的新行中:

    :put +

备注:

  1. 如果您选择一个字范围,上面的将不起作用。使用"*y"+y将此视觉块保存到剪贴板。然而,这很难键入,我仍在考虑替代方案。
  2. :help "*:help *+更多信息
  3. brew info vim将能够看到安装vim的其他选项。目前它没有任何其他选项。

仅在ubuntu终端下的vim中,

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

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

selectingmouseright-click copy的帮助下在我的情况下工作。

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

上面没有为我工作在我的Windows笔记本电脑上。

Ctrl+C可以复制…但我需要Shift+插入到粘贴!

(一个很好的理由,总是得到一台笔记本电脑,其中插入总是可以访问,而无需按辅助键)

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

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


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

set clipboard=unnamedplus

对于OSX,就像上面明确的10342答案一样,你需要确保vim支持剪贴板功能,说OSX预装的那个不支持剪贴板,如果你运行brew install vim就可以了

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

为了克服这个问题,我只是将我的vim命令别名为brew版本,而不是OSX默认版本:

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

现在我是金色的

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

ggVGy

或者,更简单地说:

%y

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

设置剪贴板=unnamedplus

在我的. vimrc

一切都运转良好

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

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

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

原谅我的英语!:-)

我有问题,因为我的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”复制和粘贴。

适用于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 (removes any extraneous vim dependency packages from system)$ sudo apt-get install vim-gnome (or `sudo apt-get install vim-gtk3` for newer Ubuntu versions)

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

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

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

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

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

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

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

在此处输入图片描述

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

我发现如果你取消检查:

查看->允许鼠标报告

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

命令+c

再次。

在我的例子中,通过用鼠标突出显示(单击和拖动)来选择文本,导致vim进入视觉模式。

无论如何,在mac上,最简单的解决方案是使用fn + mouse click and drag来避免进入可视模式。

如果您希望在默认情况下避免这种行为,您可以编辑您的vimrc

此答案包含特定于macOS用户的详细信息。

将以下行附加到~/.vimrc

set clipboard=unnamed

如果这不起作用,请检查您安装的版本是否未启用clipboard功能。编写此答案时(2019年),macOS附带的默认vim未启用剪贴板选项。您需要该选项才能访问系统剪贴板。

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

vim --version | grep clipboard

结果,您应该有+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"

上面将安装启用选项+clipboard的最新VIM。

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

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

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

我的解决方案是将以下行放到. vimrc:

map <C-y> :w !xclip -sel c <CR><CR>

脚本使用Ctrl+y将选定的行(低谷可视模式)或文件内容(如果没有选择)复制到剪贴板。我正在使用ManjaroLinux如果重要的话。

我在mac osx(10.15.3)上和vim新手。我发现这很令人沮丧,这里的所有答案都太复杂和/或不适用于我的情况。我最终通过两种方式解决了这个问题:

  1. 使用pbCopy的键映射:适用于mac附带的旧版本vim。

    vmap '' :w !pbcopy<CR><CR>添加到您的~/. vimrc
    现在你可以直观地选择并点击''(两个撇号)复制到剪贴板

  2. 安装较新版本的vim,以便我可以访问其他答案中最推荐的解决方案:

    brew install vim
    alias vim=/usr/local/bin/vim(应该将其添加到您的~/. bashrc或等效文件中)
    现在您可以直观地选择并点击"+yy复制到剪贴板

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

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

"*y

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

我想补充一种将该行复制到剪贴板并在函数上使用它的方法。

这是一个在浏览器中打开URL的示例

let g:chrome_exe = 'C:/.../Google/Chrome/Application/chrome.exe'function OpenURL()" copy the line and put it in the register *normal "*yy:execute "silent !start ".g:chrome_exe." ".getreg("*")endfunction
map ,url :call OpenURL()<CR>

我一直在努力复制到剪贴板。在Vim中,使用可视模式非常简单,但如果你想复制到剪贴板,事情就会非常混乱。我有使用xclip实用程序复制的简单方法。为此,您必须先安装xclip。

对于整个文件,它非常简单

xclip -sel clip filename

但如果您只想复制特定范围的行号
tail -n +[n1] filename | head -n [n2] | xclip -sel clip

你可以使用~/. bashrc来简化这个

#rangecp copy lines from n1 to n2 from a given file to clipboardfunction rangecp(){if [ -f $1 ]thenif [ ! -z $3 ]thendiff=$(($3 - $2 + 1))#diff=`expr $3 - $2 + 1`tail -n +$2  $1 | head -n $diff | xclip -sel clipelif [ ! -z $2 ]thentail -n +$2  $1 | xclip -sel clipelseecho "Provide a range from [n1] lines to [n2] lines"fielseecho "[ $1 ] file doesn't exist"fi}

然后

source ~/.bashrc
如何使用

rangecp filename.txt 50 89rangecp filename.txt 50

我在这个问题上看到了很多答案,而实现这一目标的方法是许多答案的结合。

我遵循的步骤是将vim复制到系统剪贴板

  1. 使用sudo apt remove vim卸载vim。(我太懒了,找不到如何使用+剪贴板支持重新编译它。
  2. 使用+剪贴板附带的sudo apt install vim-athena安装一个名为vim-athena的不同vim包。
  3. 添加到~/.vimrc以下行:set clipboard=unnamedplus
  4. 通过进入命令模式并键入source %来获取文件。
  5. 保存并退出。

备注:我正在使用Ubuntu 20.04。

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

nnoremap Y "+yvnoremap Y "+ynnoremap yY ^"+y$

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

在ubuntu 21.04、vim 8.2上测试。

在带有gnome的linux(ubuntu、xubuntu等)中安装vim-gnome,您将能够使用VISUAL选择然后正常按Ctrl+C并使用Ctrl+V粘贴到其他应用程序中

sudo apt install vim-gnome

对于Mac OS X,在终端中:

  • 运行vim --version | grep clipboard检查剪贴板是否启用(使用+)

vim--version|grep clipboard

  • 将下面的代码添加到. vimrc文件中

if has("clipboard")set clipboard=unnamed " copy to the system clipboard
if has("unnamedplus") " X11 supportset clipboard+=unnamedplusendifendif

  • 重启终端&vim

参考:设置Vim以在Mac OS X上拉到剪贴板

除了vim-gnome,Ubuntu 20.04上的neovim默认也支持“+y”。

如果你不想安装一个新程序,你总是可以做cat file.txtgedit file.txt的懒惰方法,然后从那里复制。