与其他编辑器不同,vim商店将文本复制到自己的剪贴板中。 因此,我很难从网页复制一些文本并将其粘贴到当前的工作文件中。 碰巧我必须打开gedit或手动输入它。
我可以在系统的剪贴板上进行vim粘贴吗?
-
可能重复如何使用vim复制到剪贴板?
-
复制"+ y粘贴"+ p工作就像猛拉和粘贴一样,除非您之前指定了注册表。
-
要使用以下命令,请确保已完成sudo apt-get install vim-gnome,这将将该功能添加到使用系统剪贴板的内置vim中。
-
@Harnirvair对于这里的许多读者来说,vim-gnome可能在他们的操作系统/发行版中是矫枉过正或根本不可用,而我怀疑vim-gtk并且最好vim-gtk3更可能存在并且拉动更少的依赖,同时仍然提供剪贴板集成(至少对于那些仍然在X11上的人;我不确定这一切是如何与Wayland相互作用的)。
-
...嗯,我的评论是基于找到Ubuntu的vim-gnome包,这似乎是旧的GNOME 2的东西。但是,在Debian本身,vim-gnome只是一个安装vim-gtk3和vim-gui-common的虚拟包。我的猜测是后者在这里提供了剪贴板增强功能。
-
另见vi.stackexchange.com/questions/84/…
-
默认情况下在Fedora上 - 没有剪贴板访问权限(你需要gvim),superuser.com/questions/194747/…
-
顺便说一句,在Windows系统上,当在cmd窗口中运行VIM时,通常的Ctrl + v,Ctrl + c窗口快捷方式可以与Windows剪贴板进行交互。下面提供的解决方案不适合我。
"*和"+寄存器用于系统的剪贴板(:help registers)。根据您的系统,他们可能会做不同的事情。例如,在不使用X11(如OSX或Windows)的系统上,"*寄存器用于读取和写入系统剪贴板。在X11系统上,可以使用两个寄存器。有关详细信息,请参阅:help x11-selection,但基本上"*类似于X11的PRIMARY选择(通常使用鼠标复制您选择的内容并使用鼠标中键粘贴),"+类似于X11的CLIPBOARD选择(其中是适当的剪贴板)。
如果所有这些都超过您的头脑,请尝试使用"*yy或"+yy将一行复制到系统的剪贴板。假设您有适当的编译选项,那么一个或另一个应该可以工作。您可能希望将其重新映射到更方便的地方。例如,您可以将vnoremap "*y放在?/ .vimrc中,这样您就可以直观地选择并按Ctrl + c来抓取系统的剪贴板。
请注意,如果:echo has('clipboard')返回0,则无法从系统剪贴板复制/粘贴。在这种情况下,vim不会使用+clipboard功能进行编译,您必须安装其他版本或重新编译它。默认情况下,某些Linux发行版提供了最小的vim安装,但通常如果安装vim-gtk或vim-gtk3包,则可以获得额外的功能。
您还可以查看:help cb中描述的'clipboard'选项。在这种情况下,您可以:set clipboard=unnamed或:set clipboard=unnamedplus使所有yanking / delete操作自动复制到系统剪贴板。在某些情况下,如果您将其他内容存储在剪贴板中,因为它会覆盖它,这可能会带来不便。
要粘贴,您可以使用"+p或"*p(同样,取决于您的系统和/或所需的选择),或者您可以将这些映射到其他内容。我明确地键入它们,但我经常发现自己处于插入模式。如果您处于插入模式,您仍然可以使用*或+将它们粘贴到适当的缩进处。见:help i_CTRL-R_CTRL-P。
还值得一提的是vim的paste选项(:help paste)。这使得vim进入一种特殊的"粘贴模式",禁用其他几个选项,允许您使用终端仿真器或多路复用器熟悉的粘贴快捷方式轻松粘贴到vim中。只需输入:set paste即可启用它,粘贴您的内容,然后键入:set nopaste以禁用它。或者,您可以使用pastetoggle选项设置切换模式的键码(:help pastetoggle)。我建议使用寄存器而不是这些选项,但如果它们仍然太可怕,那么当你完善你的vim印章时,这可能是一个方便的解决方法。
有关更多详细信息,请参阅:help clipboard。
-
这是非常有用的,但是你可以总结一下从系统剪贴板粘贴需要做什么的键击...例如,用"*p做什么?我按Shift-',然后按Shift-8,然后按p等?
-
是的,按顺序键入这三个字符。 vim中的许多命令使用所谓的"操作员暂挂模式",其中按下一个键然后vim等待更多键。以dd为例。第一个d进入操作员暂挂模式,然后第二个d完成命令并删除该行。但是,如果键入dG,G会将其删除到文件的末尾,而不是仅删除该行。寄存器使用相同的主体来允许各种命令使用它们。
-
唉!如果我今天才看到这篇文章!这是我一直想知道的关于从系统剪贴板复制和粘贴的一切。" *或 +"是纯金。
-
重点:你需要安装vim-gtk包(至少在Debian下),以获得用+xterm_clipboard编译的vim。花了我40万才找到这个,只有几秒钟到sudo apt-get install vim-gtk。
-
@Kazark这很棒,虽然C-r C-p +对于Windows只是Ctrl-V来说有点拗口。看看我的答案,它做了一个映射。此命令:inoremap "+p然后在插入模式下,Ctrl-V
-
仅供参考,在Windows和Mac "*和"+上是等效的。
-
@DominykasMostauskis vim-gnome也有效,并且已启用+xterm_clipboard。
-
谢谢,这是非常翔实的。我想补充一点,如果你的发行版没有类似"vim-gtk"的东西,你可能正在寻找一个名为gvim的软件包。
-
我键入':help registers'并且无法切换回我的缓冲区...悲伤的故事
-
通常,帮助窗口会以拆分方式打开,但请尝试:b#
-
对于Red Hat或Fedora发行版,请安装vim-X11.x86_64软件包并使用vimx完成copy-pate。如果没有启用剪贴板,您将无法获得此功能。
-
有人可以澄清你是否只需+xterm_clipboard或+clipboard?我正在开发一个solaris终端会话,我有一个带有+clipboard的纯vim 7.4,但我发现自己无法使用上述命令复制到系统剪贴板(我在MacOS上)。我不可能安装gvim等。
-
有时,编辑器中的"右键单击"会从系统的剪贴板中粘贴。
-
谢谢你的好解释。通常它适用于我,除了我在su会话中启动vim的情况。具体步骤如下:start xterm然后su - root - 现在"*p不从X剪贴板插入,而是从vim剪贴板插入并将Client is not authorized to connect to Server打印到控制台。在这种情况下,xhost +有所帮助。
-
@dma_k不确定sudoedit而不是sudo vim是否可以解决您的问题
-
@Chev不确定它在2014年是什么样的,但今天在Debian sid中,包vim-gnome只是vim-gtk3和vim-gui-common的虚拟包装器。
-
gg"+yG是好朋友; )
-
我在Fedora 25上使用默认的Vim 8.0,echo has('clipboard')返回0
-
要在Fedora 20+中打开剪贴板,您需要安装vim-X11并使用vimx而不是vim运行Vim。请参阅vi.stackexchange.com/a/2065/11986,或参阅@DarkForce的评论
-
@MrPickles7我一直试着无济于事,但是我发现中心点击确实存在,这要归功于Connor的括号:"...... X11的主要选择(通常......用鼠标中键粘贴)......"
-
答案太长了。如果我想要这个描述,我可以阅读文档或博客。
-
您可能还需要启用X11转发(在终端仿真器中:在PuTTY中转到SSH> X11)并在Windows计算机上安装/运行X11服务器。您可以通过查看Windows端是否打开gvim来测试X11是否正常转发。
-
@DominykasMostauskis我没有权限在特定服务器上安装vim-gtk。 SHIFT + INSERT允许我将系统剪贴板中的内容粘贴到vim中
-
@Nirvan完全依赖于您正在使用的终端仿真器。请参阅有关:help paste的最后一段
-
更新vim 8+(Linux和Mac),只需在普通模式下进行系统粘贴即可。不再需要:set paste。 stackoverflow.com/questions/11489428/…
您可以通过gnome-terminal的快捷方式复制到vim中进行粘贴。使文件处于插入模式并使用
Ctrl + Shift + v。
请事先记住
避免弄乱压痕。
-
如果有多个像python for循环这样的行,这会搞乱缩进
-
使用粘贴切换进行插入模式。例如。 set pastetoggle = 然后在插入模式下,点击然后插入你的python代码。
-
请注意,这适用于vim,但不适用于gvim。
-
是的,用Ctrl + Shift + c复制并粘贴到其他文件中
-
如果标签/空格,等等显示为可见字符(通过listchars选项),那么将复制那些替换字符而不是隐藏字符。
-
当问题似乎是关于从/到vim的直接yanking /粘贴,那么我不确定通过终端的天真复制/粘贴层真正回答该问题的文本。 OP可能知道这一点,但没有提及它,因为它在实践中经常是无用的。 ;)对于其他人提到的问题,我补充一点,如果你有行号,那么从vim天真地复制到系统剪贴板中也几乎没用,我们许多人发现它们是不可或缺的:它们也被抛弃了。
-
鉴于其简明的答案,这应该是选定的答案
-
适用于mac os
-
更新vim 8+(Linux和Mac),只需在普通模式下进行系统粘贴即可。不再需要插入模式或:set paste。 stackoverflow.com/questions/11489428/…
Linux的
在我的Linux系统上,+和*寄存器映射到X11选择,可以使用鼠标中键粘贴。当使用:set clipboard=unnamed和:set clipboard=unnamedplus时,寄存器映射到剪贴板,并可以用CTRL-V粘贴。
具体细节似乎与配置和系统有关,因此您的里程肯定会有所不同。不过,它肯定会让你指向正确的方向。
也可以看看
http://vim.wikia.com/wiki/Accessing_the_system_clipboard
-
只有*映射到X11主寄存器(通常由鼠标粘贴)。 +映射到通常由快捷方式粘贴的X11剪贴板寄存器。
-
@ZyX不在我的系统上,但你的里程肯定会有所不同。如果您希望跨平台和软件版本获得一致的体验,最好明确配置您想要的行为。
-
我相信这意味着你有像klipper / glipper这样的剪贴板管理器,它们能够同步两个缓冲区。它没有改变vim使用*作为主要和+作为剪贴板X11寄存器的事实,你可以在vim源中看到这一点:这些值在那里被设置并且从不被修改,clip_star和clip_plus是始终分别用于*和+寄存器。
-
set clipboard=unnamedplus为我的Linux工作
因为我的配置适用于复制和粘贴
1 2 3 4 5
| " copy and paste
vmap <C-c>"+yi
vmap <C-x>"+c
vmap <C-v> c<ESC>"+p
imap <C-v> <ESC>"+pa |
-
你粘贴了什么?
-
这个恕我直言是一个更好的解决方案,将clibboard设置为未命名 - 而不是与每个x / dd / y等操作混乱操作系统剪贴板。在Mac上,将C(ctrl)修改器更改为D以映射cmd + c / x / v组合可能是更好的主意。
这将是您在vimrc中为此目的所需的行:
1 2 3
| 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 |
-
我喜欢你的解决方案。我想要一个更好的解释。
-
优秀。使用寄存器总是让我犹豫,不得不思考。这要好得多
我认为这个问题应该得到一个更客观的答案。
进入粘贴模式
-
ESC
-
:设置粘贴
-
按i
-
SHIFT + Insert(在剪贴板上复制了文本)
离开粘贴模式
您粘贴了文本,然后您可以再次键入。
-
我让这个工作,但:set nopaste什么也没做。该怎么办?我为什么需要它?
-
嗯,实际上,确实如此。当您执行:set nopaste时,您告诉编辑您不想再粘贴了。当你点击i时,你将返回编辑模式:)。
-
对不起我是vi noob。是否有任何理由不能永久保留:set paste?
-
老实说,马可,我不知道。
-
SHIFT + Insert为我做了,谢谢!
-
@Marko一直没有启用:set paste的一个好理由是,在粘贴模式下,您无法自动插入制表符和注释字符(比较将光标放在带注释的行上并按下o粘贴模式而不是粘贴模式)。
剪贴板
有一个特殊的寄存器用于存储这个选择,它是"*
寄存器。除非有关于什么文本的信息,否则没有任何内容
选中即将更改(例如,在某处单击鼠标左键),或何时更改
另一个应用程序想要粘贴选定的文本。然后放入文本
在"*寄存器中。例如,切断一条线并使其成为当前的线
选择/把它放在剪贴板上:
同样,当您要粘贴其他应用程序中的选择时,例如,
通过单击鼠标中键,选择将放在"*寄存器中
首先,然后'put'像任何其他寄存器一样。例如,要把
选择(CLIPBOARD的内容):
登记E354
1 2 3 4 5 6 7 8 9 10
| > 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 2
| 1. Clipboard: Copy
2. Vim insertmode, middle mouse key |
检查终端中的X11剪贴板支持
当您想在终端中运行Vim时,您需要查找使用剪贴板支持编译的Vim版本。
检查X11-clipboard支持,从控制台输入:
如果你看到"+ xterm_clipboard",你很高兴。
http://vim.wikia.com/wiki/Accessing_the_system_clipboard
The X server maintains three selections, called:
PRIMARY, SECONDARY and CLIPBOARD
The PRIMARY selection is conventionally used to implement copying and
pasting via the middle mouse button. The SECONDARY and CLIPBOARD
selections are less frequently used by application programs.
http://linux.die.net/man/1/xsel
我尝试了上面的建议,但没有一个在我的环境中工作。 (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。
-
对我来说,一个简单的右键单击就像一个魅力!!只需右键单击!
-
因为您正在使用终端,而ssh vim无法通过SSL访问本机系统的剪贴板。 SHIFT+INSERT有效,因为它是终端的粘贴选项(或者在您的情况下为PuTTY);但是,缩进可能是错误的。查看我关于paste选项的答案的最后一段来解决这个问题。
-
@jinksPadlock shift + insert在这种情况下运行良好,但我还没有能够从ssh vim复制到我客户端的X剪贴板。你可以分享你的映射到的内容吗?
-
一直在努力解决这个问题。试图了解你的环境是什么:你是否在Windows上使用Putty通过ssh登录linux服务器,然后通过putty终端启动VIM?那么在VIM终端你按shift + Insert?我在windows(WSL)上使用bash做同样的事情..但Shift + Insert不起作用?
-
知道为什么会这样吗?我也试过cntrol + Shift + V和一大堆其他命令..
-
@lliseil,你有没有弄清楚如何从VIM粘贴到Windows?
-
@ alpha_989,你说的是我当时的环境。对不起,我无法回答lliseil b / c我不再有那个环境来检查设置。以下是可能与您的WSL配置相关的问题:stackoverflow.com/questions/38832230/…
-
@jinksPadlock。谢谢..是的..我可以通过鼠标复制/粘贴..试图通过"仅键盘"找出如何做到这一点。从Windows复制到VIM可能是通过键盘使用Putty,但不是反向。在bash for windows ..它不可能在任何方向ATM上这样做。编译了一个资源列表,指出人们在正确的方向,也为我们..如果你有什么要添加..可以在这里添加它们:stackoverflow.com/questions/45271895/…
-
@ alpha_989以后 - 好于永远;)我无法添加到jinksPadlock'因为我现在手指下没有Windows操作系统。 SHIFT+INS从linux主机工作到ssh vim以及鼠标第三次点击。
没有+剪贴板所以我想出了使用xsel的替代解决方案:
添加到?/ .vimrc:
vnoremap :w !xsel -b
-
谢谢你的好主意!我最终使用:vnoremap :w !xclip -i -sel c
对于vim安装不支持*和+寄存器的人员的快速说明。没有必要从剪贴板下载新的vim安装进行粘贴。这是另一种方法:
1)安装parcellite(内存占用少的剪贴板管理器);
2)在.vimrc文件中,添加以下内容:
1
| command Clip r !parcellite -c |
3)重启vim。
现在当您输入:Clip作为ex命令时,剪贴板的内容将粘贴在光标处。您还可以将新命令映射到功能键,以便能够通过一次击键执行此操作。
这对我有用:Ctrl + Shift + V
-
@ neel的回答已经说明了这一点。如果您想说它也适合您,那么这应该只是评论或更好的投票。
如果你在MAC OSX中使用vim,不幸的是它配备了较旧版本,并且没有符合剪贴板选项。幸运的是,自制软件可以轻松解决这个问题。
安装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
现在,您可以使用yy复制vim中的行并将其粘贴到系统范围内。
继Conner的答案之后,这很好,但插入模式下的C-R C-p +和C-R C-p *有点不方便。从命令模式Ditto "*p和"+p。
一位VIM大师建议如下将C-v映射到C-R C-p +。
You could have :inoremap "+p for insert mode only
if you really wanted to override blockwise visual mode (not recommended by him as visual
mode is good) you could have map "+p
值得一提的是,在使用Vim的OSX上,您可以使用鼠标选择文本,Cmd-C复制到OSX系统剪贴板,复制的文本将在Vim外部的剪贴板中可用。
换句话说,OSX将其视为常规窗口,这就是备受诟病的Apple"Command"按钮派上用场的地方。
B-30
-
对于任何其他操作系统上的任何半合适的终端仿真器也是如此。苹果在这里没有任何优势。
根据@ lis2的答案,我使用了一个更简单的配置,最后不会强制插入模式:
1 2 3 4 5 6 7
| " 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可视模式
-
i_CTRL-V:按字面插入下一个非数字,也映射到i_CTRL-Q
作为替代方案,可以使用分别在"yank","delete"和"put"Vim动词中启发的键:,和。这些只会覆盖一个默认映射:
如果你想改变你的vimrc等其他解决方案是好的...但是我想要一个简单的方法从vim复制到我的系统键盘。这就是我提出的。
-
使用可视模式v选择要复制的文本
-
按:(它将自动展开以显示:'<,'>)
-
键入y *或y +(取决于您的系统)将所选文本拖到系统剪贴板中
你真正需要的是EasyClip。它会做到这一点,还有更多......
对此最简单的解决方案,也可以通过ssh在不同的Linux机器之间运行:
检查vim是否支持X-11剪贴板:vim --version | grep clipboard。如果报告-clipboard和-xterm_clipboard,则应安装vim-gtk或vim-gnome(在arch linux上使用gvim)
将以下行添加到.vimrc:
1 2
| set clipboard=unnamedplus
set paste |
如果您通过ssh在其他计算机上登录,请使用选项-Y:ssh -Y machine
现在,复制和粘贴应该在单个和不同的机器上完全按预期工作,只需使用y表示yank,p表示粘贴。 NB在要使用此功能的所有计算机上修改.vimrc。
-
我认为,X服务器应该也可以在服务器中使用。是啊!它可能是由vim-gtk安装的。我认为,xvfb将是运行X服务器的备用选项。
如果您先使用鼠标
然后right click mouse和缓冲区中的内容将被粘贴
使用Linux或Mac上的Vim 8+,您现在可以简单地使用操作系统的本机粘贴(Linux上的ctrl+shift+V,Mac上的cmd+V)。不要按i进行插入模式。
它将粘贴操作系统剪贴板的内容,保留空格和制表符,而不添加自动延迟。它等同于旧的:set paste,i,ctrl+shift+V,esc,:set nopaste方法。
您甚至不再需要安装+clipboard或+xterm_clipboard vim功能。此功能称为"括号粘贴"。有关更多详细信息,请参阅将文本粘贴到vim时关闭自动缩进
在:set clipboard=unnamed设置之上,如果你在Mac OS X 10.9上的Terminal.app上使用vim,你应该使用mvim -v来获得brew install macvim。默认vim不支持剪贴板选项。
我在2017年年中的Macbook Pro上遇到了这个问题,在iTerm2中运行vim作为我的主要开发环境。
正如其他答案所示,我运行vim --version并注意到它返回-clipboard,这意味着我的机器附带的vim版本尚未使用剪贴板选项进行编译。
vim的homebrew包似乎使用clipboard选项进行编译,因此我的修复方法是:
运行brew install vim
将set clipboard+=unnamed添加到我的~/.vimrc文件中
关闭并重新打开iTerm2
当我使用未与Gnome集成的Debian vim时(vim --version | grep clip#显示没有剪贴板支持),我可以在按住Shift键并用鼠标选择文本后复制到剪贴板,就像任何其他诅咒计划。正如我从@Conner的评论中看到的那样,终端(在我的情况下是gnome-terminal)在感知到我的Shift按下时关闭了它的鼠标事件报告。我想基于curses的程序可以在将某个Escape序列发送到终端后接收鼠标事件。
有两种简单的方法可以做到这一点。使您的文件处于插入模式和
1)按下鼠标中的中间按钮(滚轮),或
2)Ctrl + Shift + V.
对于某些国际键盘,您可能需要按" + Space来获取"。
因此,在这种情况下,您必须按"Space + y或"Space * y才能复制。
和"Space + p或" Space * p进行粘贴。
由于vim 8右键单击默认启用可视模式。这可以防止"正常"副本和粘贴(称之为"设计缺陷"https://github.com/vim/vim/issues/1326)。
通过执行以下操作修复
echo"set mouse-=a">> ~/.vimrc。
退出并重新启动vim。
如果您在Windows上并且想要使用p粘贴系统剪贴板的内容,请键入此命令。
1
| :set clipboard = unnamed |
这解决了我的问题。