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

San*_*mar 712 vim clipboard editor

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

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

Con*_*ner 822

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

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

要知道,从系统剪贴板复制/粘贴将无法正常工作,如果:echo has('clipboard')返回0.在这种情况下,Vim不是与编译+clipboard功能,你将不得不安装一个不同的版本,无需重新编译.默认情况下,一些Linux发行版提供了最小的vim安装,但通常如果你安装了vim-gtk软件包,你就可以获得额外的功能.

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

要粘贴,您可以使用:set clipboard=unnamedplus"+p(再次,取决于您的系统和/或所需的选择),或者您可以将这些映射到其他内容.我明确地键入它们,但我经常发现自己处于插入模式.如果您处于插入模式,您仍然可以使用"*p或粘贴适当的缩进<C-r><C-p>*.见<C-r><C-p>+.

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

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

  • 这是非常有用的信息,但是你可以总结一下从系统剪贴板粘贴需要做什么的键击...例如,用"*p"做什么?我按Shift-',然后按Shift-8,然后按等等? (89认同)
  • 重点:你需要安装`vim-gtk`包(至少在Debian下),以获得用`+ xterm_clipboard`编译的vim.花了我40万才找到这个,只有几秒钟来"sudo apt-get install vim-gtk`. (51认同)
  • 是的,按顺序键入这三个字符.vim中的许多命令使用所谓的"操作员暂挂模式",其中按下一个键然后vim等待更多键.以`dd`为例.第一个`d`进入操作员暂挂模式,然后第二个`d`完成命令并删除该行.但是,如果键入`dG`,`G`会将其删除到文件的末尾而不是删除该行.寄存器使用相同的主体来允许各种命令使用它们. (9认同)
  • 唉! 如果我今天才看到这篇文章!这是我一直想知道的关于从系统剪贴板复制和粘贴的一切."<Cr> <Cp>*或<Cr> <Cp> +"是纯金. (3认同)
  • @DominykasMostauskis`vim-gnome`也可以使用并且启用了`+ xterm_clipboard`. (3认同)
  • 谢谢,这是非常翔实的.我想补充一点,如果你的发行版没有类似"vim-gtk"的东西,你可能正在寻找一个名为gvim的软件包. (2认同)
  • 这是一个**严肃的**文本墙,用于复制和粘贴说明!**tl;博士** (2认同)

nee*_*eel 135

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

Ctrl+ Shift+ v.

请事先记住

 :set paste 
Run Code Online (Sandbox Code Playgroud)

避免弄乱压痕.

  • 如果有多个像python for循环这样的行,这会搞乱缩进 (19认同)
  • 使用粘贴切换进行插入模式.例如,设置pastetoggle = <F2>然后在插入模式下,点击<F2>然后插入你的python代码. (11认同)
  • vim 8+(Linux 和 Mac)更新,只需在普通模式下进行系统粘贴即可。不再需要插入模式或`:set Paste`。/sf/ask/804259991/#57085290 (4认同)
  • 请注意,这适用于vim,但不适用于gvim. (2认同)
  • 鉴于其简明的答案,这应该是选定的答案 (2认同)

Tod*_*obs 39

Linux的

在我的Linux系统上,+*寄存器映射到X11选择,可以用鼠标中键粘贴.当:set clipboard=unnamed:set clipboard=unnamedplus使用,则该寄存器映射到剪贴板,并且可以与CTRL-V被粘贴.

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

也可以看看

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

  • 只有 `*` 映射到 X11 主寄存器(通常由鼠标粘贴)。`+` 映射到通常由快捷方式粘贴的 X11 剪贴板寄存器。 (3认同)
  • `set clipboard = unnamedplus`适用于我 (2认同)

lis*_*is2 39

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

" copy and paste
vmap <C-c> "+yi
vmap <C-x> "+c
vmap <C-v> c<ESC>"+p
imap <C-v> <ESC>"+pa
Run Code Online (Sandbox Code Playgroud)

  • 恕我直言,这是一个更好的解决方案,将 clibboard 设置为未命名 - 不要在每个 x/dd/y 等操作中扰乱操作系统剪贴板。在 Mac 上,将 C(ctrl) 修饰符更改为 D 来映射 cmd+c/x/v 组合可能是更好的主意。 (2认同)

Dan*_*tle 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
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢你的解决方案.我想要一个更好的解释. (2认同)

jav*_*301 33

Shift+ 右键单击​​ -> 粘贴

对我有用

  • 这个答案需要更多的爱,因为它特别适用于没有剪贴板功能的 vim-tiny。确保您处于插入模式,但不是可视模式。然而,我似乎也无法让副本发挥作用。 (4认同)

iva*_*ncz 21

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

进入粘贴模式

  • ESC
  • :设置粘贴
  • i
  • SHIFT+ Insert(在剪贴板上复制文本)


离开粘贴模式

  • ESC
  • :设置nopaste
  • i

您粘贴了文本,然后您可以再次键入.

  • 嗯,事实上,确实如此。当您执行“:set nopaste”时,您是在告诉编辑器您不想再粘贴。当您点击“i”时,您将返回到编辑模式:)。 (4认同)
  • 你想知道为什么之前没有人能如此简单地解释这一点。 (4认同)
  • 我让它工作了,但是 `:set nopaste` 什么也没做。它应该做什么?为什么我需要它? (3认同)
  • 老实说,Marko,我不知道。 (2认同)
  • 这对我来说就像一个魅力。每次我回到 vim 时,我总是不得不看起来像这样。 (2认同)

The*_*emz 16

剪贴板

还有就是可以存放选择一个特殊的寄存器,它就是"*寄存器.没有什么是摆在这里除非选择文本的相关信息即将改变(例如,用鼠标左键点击某处),或在其他应用程序要粘贴选定的文本.然后将文本放在"*寄存器中.例如,要剪切一条线并使其成为当前选择/将其放在CLIPBOARD上:

    "*dd
Run Code Online (Sandbox Code Playgroud)

类似地,当您想要粘贴来自另一个应用程序的选择时,例如,通过单击鼠标中键,选择将首先放入"*寄存器,然后像任何其他寄存器一样放入'.例如,放置选择(CLIPBOARD的内容):

    "*p
Run Code Online (Sandbox Code Playgroud)

登记 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 "/
Run Code Online (Sandbox Code Playgroud)

从剪贴板粘贴

1. Clipboard: Copy
2. Vim insertmode, middle mouse key
Run Code Online (Sandbox Code Playgroud)

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

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

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

如果你看到"+ xterm_clipboard",你很高兴.

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

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

小学,中学和剪贴板

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

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


小智 12

我尝试了上面的建议,但没有一个在我的环境中工作.(Windows PuTTY克隆ssh)

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

其中一条评论建议使用SHIFT+INSERT哪种方法从我的桌面剪贴板粘贴到Vim的缓冲区.Ctrl-C已经在努力从Vim复制到桌面的剪贴板.

  • 我正在使用cmim工具[windows 8.1]中的vim.当你进入cmder设置>键和宏>粘贴时,我有用于多行粘贴的shift + insert命令和用于单行粘贴的ctrl + v. (2认同)
  • 因为您正在使用终端而ssh vim无法通过SSL访问本机系统的剪贴板.`SHIFT + INSERT`有效,因为它是终端的粘贴选项(或者在你的情况下是PuTTY); 但是,缩进可能是错误的.查看我关于`paste`选项的答案的最后一段来纠正这个问题. (2认同)
  • @jinksPadlock。谢谢..是的..我可以通过鼠标复制/粘贴..试图弄清楚如何通过“仅键盘”来做到这一点。从 Windows 复制到 VIM 可以仅使用 Putty 通过键盘进行复制,但不能反向复制。在 Windows 的 bash 中......在任何一个方向的 ATM 上都不可能这样做。编制了一份资源列表,为人们指明正确的方向,也为我们提供帮助。如果您有任何要添加的内容,也许您可​​以在此处添加它们:/sf/ask/3169032681/ -从 Windows 应用程序粘贴到 vim-gnome-running-via-ssh-to-linu (2认同)

s_s*_*nal 10

这些组合键适用于任何操作系统。

使用鼠标选择目标文本,并参考按键序列进行复制、剪切和粘贴。

  • 复制:Ctrl+Insert
  • 粘贴:Shift+Insert
  • 切:Shift+Del
  • 粘贴:Shift+Insert


小智 9

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

添加到〜/ .vimrc:

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


wis*_*cky 8

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

它将粘贴操作系统剪贴板的内容,保留空格和制表符,而不添加自动缩进。它相当于旧的:set paste, i, ctrl+shift+V, esc,:set nopaste方法。

您甚至不再需要安装+clipboard+xterm_clipboardvim 功能。此功能称为“括号粘贴”。有关更多详细信息,请参阅将文本粘贴到 vim 时关闭自动缩进


Muh*_*gan 8

复制到操作系统剪贴板

在视觉模式下选择文本,按 "*y

从操作系统剪贴板粘贴

"*p


Dee*_*pta 8

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

  • 复制到系统剪贴板:

    1. 选择要在可视模式下复制的内容。
    2. 类型"+y
    3. Enter
  • 从系统剪贴板粘贴一些内容:

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

要了解更多其工作原理从 Vim 到其他程序复制并粘贴!


小智 6

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

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

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

command Clip r !parcellite -c
Run Code Online (Sandbox Code Playgroud)

3)重启vim.

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


cha*_*hao 6

最简单的解决方案,也可以通过以下ssh方式在不同的 Linux 机器之间工作:

  1. 检查 vim 是否支持 X-11 剪贴板:vim --version | grep clipboard. 如果它报告回来-clipboard-xterm_clipboard你应该安装vim-gtkvim-gnome(arch linux上的gvim)

  2. 将以下行添加到您的.vimrc

set clipboard=unnamedplus
set paste
Run Code Online (Sandbox Code Playgroud)
  1. 如果您通过 ssh 在不同的机器上登录,请使用选项 -Y: ssh -Y machine

现在复制和粘贴应该在一台机器上完全按预期工作,并且通过仅y用于 yank 和p用于粘贴在不同的机器上。注意.vimrc在要使用此功能的所有机器上修改。


小智 5

这个工作对我来说:Ctrl+ Shift+V

  • @neel 的回答已经说明了这一点。如果你想说它也对你有用,这应该只是一个评论,或者更好的投票。 (3认同)

Moh*_*eeq 5

如果您首先使用鼠标

 :set paste 
Run Code Online (Sandbox Code Playgroud)

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


NM *_*ker 5

我在 2017 年年vimiTerm2作为主要开发环境运行的 Macbook Pro 上遇到了这个问题。

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

homebrewfor的包vim似乎可以使用该clipboard选项进行编译,因此对我来说解决方法是:

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