如何从(并复制到)系统剪贴板制作vim粘贴?

时间:2012-07-15 04:28:19

标签: vim editor clipboard

与其他编辑器不同,vim商店将文本复制到自己的剪贴板中。因此,我很难从网页复制一些文本并将其粘贴到当前的工作文件中。碰巧我必须打开gedit或手动输入它。

我可以从系统的剪贴板进行vim粘贴吗?

31 个答案:

答案 0 :(得分:790)

"*"+个寄存器用于系统的剪贴板(:help registers)。根据您的系统,他们可能会做不同的事情。例如,在不使用X11(如OSX或Windows)的系统上,"*寄存器用于读取和写入系统剪贴板。在X11系统上,可以使用两个寄存器。有关详细信息,请参阅:help x11-selection,但基本上"*类似于X11&#39> PRIMARY 选项(通常会复制您使用鼠标选择的内容并粘贴到中间位置鼠标按钮)和"+类似于X11的 CLIPBOARD 选择(适当的剪贴板)。

如果一切都在您头脑中,请尝试使用"*yy"+yy将一行复制到系统的剪贴板中。假设您有适当的编译选项,那么一个或另一个应该可以工作。您可能希望将其重新映射到更方便的地方。例如,您可以将vnoremap <C-c> "*y放在〜/ .vimrc中,这样您就可以直观地选择并按 Ctrl + c 来拉动您的系统&#39;剪贴板。

请注意,如果:echo has('clipboard')返回0,则系统剪贴板中的复制/粘贴将无效。在这种情况下,vim不会使用+clipboard功能进行编译而您和& #39;我必须安装不同的版本或重新编译它。默认情况下,一些Linux发行版提供了一个最小的vim安装,但通常如果你安装vim-gtkvim-gtk3,你可以获得额外的功能。

您还可以查看'clipboard'中描述的:help cb选项。在这种情况下,您可以:set clipboard=unnamed:set clipboard=unnamedplus使所有yanking / delete操作自动复制到系统剪贴板。在某些情况下,如果您将其他内容存储在剪贴板中,因为它会覆盖它,这可能会带来不便。

要粘贴,您可以使用"+p"*p(同样,取决于您的系统和/或所需的选择),或者您可以将这些映射到其他内容。我明确地键入它们,但我经常发现自己处于插入模式。如果您处于插入模式,则仍可以使用<C-r><C-p>*<C-r><C-p>+将其粘贴到适当的缩进处。请参阅:help i_CTRL-R_CTRL-P

还值得一提的是vim的paste选项(:help paste)。这使得vim成为一种特殊的粘贴模式&#34;禁用其他几个选项,允许您使用终端仿真器或多路复用器熟悉的粘贴快捷方式轻松粘贴到vim。只需输入:set paste即可启用它,粘贴您的内容,然后输入:set nopaste以禁用它。或者,您可以使用pastetoggle选项设置切换模式的密钥代码(:help pastetoggle)。我建议使用寄存器而不是这些选项,但如果它们仍然太可怕,那么当您完善vim印章时,这可能是一种方便的解决方法。

有关详细信息,请参阅:help clipboard

答案 1 :(得分:125)

您可以通过gnome-terminal的快捷方式复制到vim中进行粘贴。使文件处于插入模式并使用

控制 + + v

事先记得

 :set paste 

避免弄乱缩进。

答案 2 :(得分:38)

的Linux

在我的Linux系统上,+*寄存器映射到X11选择,可以使用鼠标中键粘贴。使用:set clipboard=unnamed:set clipboard=unnamedplus时,寄存器会映射到剪贴板,并可以使用CTRL-V进行粘贴。

具体细节似乎与配置和系统有关,因此您的里程肯定会有所不同。不过,它肯定会让你指向正确的方向。

另请参阅

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

答案 3 :(得分:38)

我的配置适用于复制和粘贴

" copy and paste
vmap <C-c> "+yi
vmap <C-x> "+c
vmap <C-v> c<ESC>"+p
imap <C-v> <ESC>"+pa

答案 4 :(得分:33)

这将是你的vimrc中为此目的所需的行:

set clipboard+=unnamed  " use the clipboards of vim and win
set paste               " Paste from a windows or from vim
set go+=a               " Visual selection automatically copied to the clipboard

答案 5 :(得分:18)

我认为这个问题应该得到一个更客观的答案。

进入粘贴模式

  • ESC
  • :设置粘贴
  • i
  • SHIFT + 插入(在剪贴板上复制文字)


离开粘贴模式

  • ESC
  • :set nopaste
  • i

您粘贴了文字,然后又可以再次输入。

答案 6 :(得分:16)

<强> 剪贴板

有一个专门用于存储此选择的寄存器,它是“* 寄存器。除非有关于什么文本的信息,否则没有任何内容 选中即将更改(例如,在某处单击鼠标左键),或何时更改 另一个应用程序想要粘贴选定的文本。然后放入文本 在“*寄存器中。例如,切断一条线并使其成为当前的线 选择/把它放在CLIPBOARD上:

    "*dd

同样,当您要粘贴其他应用程序中的选择时,例如, 通过单击鼠标中键,选择将放在“*寄存器中 首先,然后'put'像任何其他寄存器一样。例如,要把 选择(CLIPBOARD的内容):

    "*p

注册 E354

> There are nine types of registers:                      
> 1. The unnamed register ""
> 2. 10 numbered registers "0 to "9
> 3. The small delete register "-
> 4. 26 named registers "a to "z or "A to "Z
> 5. four read-only registers ":, "., "% and "#
> 6. the expression register "=
> 7. The selection and drop registers "*, "+ and "~ 
> 8. The black hole register "_
> 9. Last search pattern register "/

从剪贴板粘贴

1. Clipboard: Copy
2. Vim insertmode, middle mouse key

检查终端中的X11剪贴板支持

当您想在终端中运行Vim时,您需要查找使用剪贴板支持编译的Vim版本。 检查X11-clipboard支持,从控制台输入:

% vim --version

如果你看到“+ xterm_clipboard”,你就可以了。

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

  

X服务器维护三个选项,名为:

     

PRIMARY,SECONDARY和CLIPBOARD

     

PRIMARY选择通常用于实现复制和   通过鼠标中键粘贴。 SECONDARY和CLIPBOARD   应用程序不常使用选择。

http://linux.die.net/man/1/xsel

答案 7 :(得分:12)

我尝试了上面的建议,但没有一个在我的环境中有效。 (通过ssh进行Windows PuTTY克隆)

出现了一些额外的Google搜索: https://unix.stackexchange.com/questions/110684/copy-paste-into-sshd-vim-from-local-windows-clipboard

其中一条评论建议使用SHIFT+INSERT来完成从桌面剪贴板粘贴到Vim缓冲区的技巧。 Ctrl-C已经在努力从Vim复制到桌面的剪贴板。

答案 8 :(得分:9)

没有+剪贴板所以我想出了使用xsel的替代解决方案:

添加到〜/ .vimrc:

vnoremap <C-C> :w !xsel -b<CR><CR>

答案 9 :(得分:6)

对于vim安装不支持*和+寄存器的人的快速说明。没有必要从剪贴板下载新的vim安装进行粘贴。这是另一种方法:

1)安装parcellite(内存占用少的剪贴板管理器);

2)在.vimrc文件中,添加以下内容:

command Clip r !parcellite -c

3)重启vim。

现在当您输入:Clip作为ex命令时,剪贴板的内容将粘贴在光标处。您还可以将新命令映射到功能键,以便能够通过一次击键执行此操作。

答案 10 :(得分:3)

这对我有用: Ctrl + Shift + V

答案 11 :(得分:2)

继Conner的回答之后,这很好,但在插入模式下C-R C-p +C-R C-p *有点不方便。从命令模式同上"*p"+p

VIM大师建议以下内容将C-v映射到C-r C-p +的内容。

  

您只能使用:inoremap <C-v> <C-o>"+p进行插入模式

     

如果你真的想要覆盖块状视觉模式(他不推荐视觉模式)   模式很好)你可以map <C-v> "+p

答案 12 :(得分:1)

复制到操作系统剪贴板

在可视模式下选择文本,然后按"*y

从OS剪贴板粘贴

"*p

答案 13 :(得分:1)

我在2017年中的Macbook Pro上遇到了这个问题,该Macbook Pro在vim内运行iTerm2作为我的主要开发环境。

正如其他答案所建议的那样,我运行了vim --version并注意到它返回了-clipboard,这意味着我的机器随附的vim的版本尚未使用剪贴板选项。

homebrew的{​​{1}}软件包似乎可以使用vim选项进行编译,因此对我来说,解决方法是:

  1. 运行clipboard
  2. brew install vim添加到我的set clipboard+=unnamed文件中
  3. 关闭并重新打开~/.vimrc

答案 14 :(得分:1)

使用Linux或Mac上的Vim 8+,您现在可以简单地使用操作系统的本机粘贴(在Linux上为ctrl+shift+V,在Mac上为cmd+V)。请勿按i进入插入模式。

它将粘贴操作系统剪贴板的内容,保留空格和制表符,而无需添加自动缩进。等效于旧的:set pasteictrl+shift+Vesc:set nopaste方法。

您甚至不需要安装+clipboard+xterm_clipboard vim功能。此功能称为“包围式粘贴”。有关更多详细信息,请参见Turning off auto indent when pasting text into vim

答案 15 :(得分:1)

如果有,请尝试将其从vimrc中删除: 设置mouse = a

它与粘贴功能搞混了。

答案 16 :(得分:1)

在 Linux (Ubuntu 20.04) 中什么对我有用

  • 复制到系统剪贴板:

    1. 在可视模式下选择要复制的内容。
    2. 输入 "+y
    3. 回车
  • 从系统的剪贴板粘贴一些东西:

    1. 移动到要在 vim 中粘贴复制文本的位置。
    2. 只需输入 "+P 在光标前粘贴/"+p 在光标后粘贴。

要了解更多信息Copy and Paste to/from Vim from/to Other Programs!

答案 17 :(得分:1)

通过ssh在不同Linux机器之间工作的最简单的解决方案是:

  1. 检查vim是否支持X-11剪贴板:vim --version | grep clipboard。如果它报告-clipboard-xterm_clipboard,则应安装vim-gtkvim-gnome(gvim on arch linux)

  2. 将以下行添加到.vimrc

  3. set clipboard=unnamedplus
    set paste
    
    1. 如果您通过ssh登录其他计算机,请使用选项-Y:ssh -Y machine
    2. 现在,复制和粘贴应该在单个和不同的计算机上完全按预期工作,只需使用y用于yank,p用于粘贴。 NB修改要使用此功能的所有计算机上的.vimrc

答案 18 :(得分:1)

你真正需要的是EasyClip。它会做到这一点,还有更多......

答案 19 :(得分:1)

根据@ lis2的回答,我使用了一个更简单的配置,最终不会强制插入模式:

" Copy and paste
if has('clipboard') && !has('gui_running')
  vnoremap <C-c> "+y
  vnoremap <C-x> "+d
  vnoremap <C-v> "+p
  inoremap <C-v> <C-r><C-o>+
endif

请注意,所有这些都会覆盖默认的Vim映射:

  • v_CTRL-C:停止可视模式
  • v_CTRL-X:从数字
  • 中减去[count]
  • v_CTRL-V:blockwise Visual mode
  • i_CTRL-V:按字面插入下一个非数字,也会映射到i_CTRL-Q

作为替代方案,可以使用分别在“yank”,“delete”和“put”Vim动词中启发的键:<C-y><C-d><C-p>。这些只会覆盖一个默认映射:

  • i_CTRL-P:向后搜索关键字以完成

答案 20 :(得分:1)

值得一提的是,在使用Vim的OSX上,您可以使用鼠标选择文本,Cmd-C复制到OSX系统剪贴板,复制的文本将在Vim外部的剪贴板中可用。

换句话说,OSX将其视为常规窗口,这就是备受诟病的Apple&#34; Command&#34;按钮派上用场。

B-30

答案 21 :(得分:1)

在设置:set clipboard=unnamed之上,如果您在Mac OS X 10.9上的Terminal.app上使用vim,则应使用mvim -v brew install macvim。默认vim不支持剪贴板选项。

答案 22 :(得分:0)

如果你想改变你的vimrc等其他解决方案是好的...但是我想要一种简单的方法来复制 vim 我的系统键盘。这就是我想出来的。

  • 使用可视模式v
  • 选择要复制的文本
  • :(它会自动展开以显示:'<,'>
  • 键入y * y +(取决于您的系统)将所选文本提取到系统剪贴板

答案 23 :(得分:0)

如果您先使用鼠标

 :set paste 

然后将right click mouse和缓冲区中的内容粘贴

答案 24 :(得分:0)

对于某些国际键盘,您可能需要按&#34; + Space 才能获得"

所以在这种情况下你必须按&#34; Space + y &#34; Space * y 要复制。

&#34; Space + p &#34; 空格 * p 要粘贴。

答案 25 :(得分:0)

由于 vim 8 右键单击,默认情况下启用可视模式。这样可以防止“正常”复制和粘贴(称其为“设计缺陷” https://github.com/vim/vim/issues/1326)。 通过执行以下操作对其进行修复:

echo "set mouse-=a" >> ~/.vimrc

退出并重新启动vim。

答案 26 :(得分:0)

有两种简单的方法可以做到这一点。使您的文件处于插入模式和 1)按下鼠标中的中间按钮(滚轮),或 2)Ctrl + Shift + V

答案 27 :(得分:0)

如果您在Windows上并且想要使用p粘贴系统剪贴板的内容,请键入此命令。

:set clipboard = unnamed

这解决了我的问题。

答案 28 :(得分:0)

我使用了NM Pennypacker的答案,并通过自制软件为2011年初的MacBook Pro安装了vim:

brew install vim

现在,我还可以使用“ *”寄存器在vim中复制和粘贴文本。我什至不必在〜/ .vimrc文件或$ PATH中进行任何更改。Homebrew在/ usr / local /中添加了符号链接。 bin,例如vim-> ../ Cellar / vim / 8.1.2350 / bin / vim。

另一种可行的方法是,使用鼠标标记并在Mac上使用复制和粘贴(cmd + c,cmd + v),在vim中复制文本行。仅当您要复制和粘贴的文本的大小小于vim的窗口大小时,此选项才有效。如果要通过标记整个窗口或使用cmd + a复制vim中的所有文本,这将复制控制台的其他部分,这是在启动vim之前编写的,这很烦人。

所以,我很高兴使用剪贴板寄存器找到了新方法。

答案 29 :(得分:0)

当我使用未与Gnome集成的Debian vim时(vim --version | grep clip#显示没有剪贴板支持),我可以在按住Shift键并用鼠标选择文本后复制到剪贴板,和任何其他curses程序一样。正如我从@Conner的评论中得知的那样,终端(在我的情况下是gnome-terminal)在感知到我的Shift按下时关闭了它的鼠标事件报告。我想基于curses的程序可以在将某个Escape序列发送到终端后接收鼠标事件。

答案 30 :(得分:0)

进入vim窗口后,按i进入插入模式。然后将光标移至所需位置,然后同时按ctrl + insert按钮从剪贴板粘贴。