编辑器 - 如何从(并复制到)系统剪贴板进行vim粘贴?
与其他编辑器不同,vim商店将文本复制到自己的剪贴板中。 因此,我很难从网页复制一些文本并将其粘贴到当前的工作文件中。 碰巧我必须打开gedit或手动输入。
我可以将vim粘贴到系统的剪贴板上吗?
24个解决方案
757 votes
vim-gtk和+clipboard寄存器用于系统的剪贴板(vnoremap "*y)。 根据您的系统,他们可能会做不同的事情。 例如,在不使用X11(如OSX或Windows)的系统上,"*寄存器用于读取和写入系统剪贴板。 在X11系统上,可以使用两个寄存器。 有关详细信息,请参阅:help x11-selection,但基本上"*类似于X11的PRIMARY选择(通常复制您使用鼠标选择的内容并使用鼠标中键粘贴),而"+类似于X11的CLIPBOARD选择(适当的剪贴板)。
如果一切都超过你的头,请尝试使用vim-gtk或+clipboard将一行复制到系统的剪贴板。 假设您有适当的编译选项,那么一个或另一个应该可以工作。 您可能希望将其重新映射到更方便的地方。 例如,您可以将vnoremap "*y放在〜/ .vimrc中,这样您就可以直观地选择并按Ctrl + c来拖动到系统的剪贴板。
请注意,如果vim-gtk返回0,则无法从系统剪贴板复制/粘贴。在这种情况下,vim不会使用+clipboard功能进行编译,您必须安装其他版本或重新编译它。 默认情况下,一些Linux发行版提供了最小的vim安装,但通常如果你安装vim-gtk软件包,你可以获得额外的功能。
您还可以查看:help paste中描述的:help clipboard选项。在这种情况下,您可以使用:set paste或:set nopaste使所有yanking / deletion操作自动复制到系统剪贴板。 在某些情况下,如果您将其他内容存储在剪贴板中,因为它会覆盖它,这可能会带来不便。
要粘贴,您可以使用:help clipboard或:help paste(同样,取决于您的系统和/或所需的选择),或者您可以将这些映射到其他内容。 我明确地键入它们,但我经常发现自己处于插入模式。 如果您处于插入模式,您仍然可以使用:set paste或:set nopaste将其粘贴到适当的缩进处。请参阅pastetoggle。
值得一提的还有vim的:help clipboard选项(:help paste)。 这会将vim置于一种特殊的“粘贴模式”,禁用其他几个选项,使您可以使用终端仿真器或多路复用器熟悉的粘贴快捷方式轻松粘贴到vim中。 只需键入:set paste即可启用它,粘贴您的内容,然后键入:set nopaste以禁用它。 或者,您可以使用pastetoggle选项设置切换模式的键码(:help pastetoggle)。 我建议使用寄存器而不是这些选项,但如果它们仍然太可怕,那么当你完善你的vim印章时,这可能是一个方便的解决方法。
有关更多详细信息,请参见:help clipboard。
Conner answered -12-24T03:05:22Z
110 votes
您可以通过gnome-terminal快捷方式复制到vim进行粘贴。 使文件处于插入模式并使用
按Ctrl + Shift+ V。
请事先记住
:set paste
避免弄乱压痕。
neel answered -12-24T03:05:55Z
37 votes
Linux的
在我的Linux系统上,+和*寄存器映射到X11选择,可以使用鼠标中键粘贴。 当使用:set clipboard=unnamed和:set clipboard=unnamedplus时,寄存器映射到剪贴板,并可以使用CTRL-V粘贴。
具体细节似乎与配置和系统有关,因此您的里程肯定会有所不同。 不过,它肯定会让你指向正确的方向。
也可以看看
[/wiki/Accessing_the_system_clipboard]
Todd A. Jacobs answered -12-24T03:06:33Z
36 votes
对于我的配置适用于复制和粘贴
" copy and paste
vmap "+yi
vmap "+c
vmap c"+p
imap "+pa
lis2 answered -12-24T03:06:53Z
30 votes
这将是您在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
Danniel Little answered -12-24T03:07:13Z
16 votes
剪贴板
有一个特殊的寄存器用于存储这个选择,它是“*寄存器。 除非有关于什么文本的信息,否则这里没有任何内容选中即将更改(例如,在某处单击鼠标左键),或何时更改另一个应用程序想要粘贴选定的文本。 然后放入文本在“*寄存器中。例如,要切断一条线并使其成为当前的线选择/把它放在剪贴板上:
"*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”,你很高兴。
[/wiki/Accessing_the_system_clipboard]
X服务器维护三个选项,称为:
小学,中学和剪贴板
PRIMARY选择通常用于实现复制和 通过鼠标中键粘贴。 SECONDARY和CLIPBOARD 应用程序使用的选择较少。
[/man/1/xsel]
The Demz answered -12-24T03:08:27Z
12 votes
我尝试了上面的建议,但没有一个在我的环境中工作。 (Windows PuTTY克隆ssh)
一些额外的谷歌搜索出现了:[/questions/110684/copy-paste-into-sshd-vim-from-local-windows-clipboard]
其中一条评论建议使用SHIFT+INSERT,它可以将我桌面的剪贴板粘贴到Vim的缓冲区。 Ctrl-C已经在从Vim复制到桌面的剪贴板。
jinksPadlock answered -12-24T03:08:57Z
11 votes
我认为这个问题应该得到一个更客观的答案。
进入粘贴模式
退出
:设置粘贴
按我
SHIFT +插入(在剪贴板上复制文本)
离开粘贴模式
退出
:设置nopaste
按我
您粘贴了文本,然后您可以再次键入。
ivanleoncz answered -12-24T03:10:00Z
8 votes
没有+剪贴板所以我想出了使用xsel的替代解决方案:
添加到〜/ .vimrc:
vnoremap :w !xsel -b
rotestein answered -12-24T03:10:28Z
6 votes
对于vim安装不支持*和+寄存器的人员的快速说明。 没有必要从剪贴板下载新的vim安装进行粘贴。 这是另一种方法:
1)安装parcellite(内存占用少的剪贴板管理器);
2)在.vimrc文件中,添加以下内容:
command Clip r !parcellite -c
3)重启vim。
现在当您输入:Clip作为ex命令时,剪贴板的内容将粘贴在光标处。 您还可以将新命令映射到功能键,以便能够通过一次击键执行此操作。
lovecraftian answered -12-24T03:11:06Z
3 votes
这对我有用:Ctrl + Shift + V.
Boseam answered -12-24T03:11:26Z
2 votes
继Conner的回答之后,这很好,但是插入模式下的map "+p和C-r C-p +有点不方便。 从命令模式Ditto "*p和"+p。
一位VIM大师建议如下将map "+p映射到C-r C-p +。
您只能使用map "+p进行插入模式
如果你真的想要覆盖块状视觉模式(他不推荐视觉模式) 模式很好)你可以有map "+p
barlop answered -12-24T03:12:00Z
1 votes
在:set clipboard=unnamed的设置之上,你应该使用mvim -v,如果你在Mac OS X 10.9上的Terminal.app上使用vim,你可以使用brew install macvim。 默认vim不支持剪贴板选项。
Nobu answered -12-24T03:12:20Z
1 votes
值得一提的是,在使用Vim的OSX上,您可以使用鼠标选择文本,Cmd-C复制到OSX系统剪贴板,复制的文本将在Vim外部的剪贴板中可用。
换句话说,OSX将其视为常规窗口,这就是备受诟病的Apple“Command”按钮派上用场的地方。
B-30
B-30 answered -12-24T03:12:49Z
1 votes
根据@ lis2的答案,我使用了一个更简单的配置,不会强制插入模式结束:
" Copy and paste
if has('clipboard') && !has('gui_running')
vnoremap "+y
vnoremap "+d
vnoremap "+p
inoremap +
endif
请注意,所有这些都覆盖默认的Vim映射:
i_CTRL-P:停止可视模式
i_CTRL-P:从数字中减去[count]
i_CTRL-P:blockwise可视模式
i_CTRL-P:字面插入下一个非数字,也映射到i_CTRL-P
作为替代方案,可以使用分别在“yank”,“delete”和“put”Vim动词中启发的键:i_CTRL-P,和。 这些只会覆盖一个默认映射:
i_CTRL-P:向后搜索关键字以完成
ericbn answered -12-24T03:13:40Z
1 votes
你真正需要的是EasyClip。 它会做到这一点,还有更多......
Scott Wade answered -12-24T03:14:00Z
0 votes
当我使用未与Gnome集成的Debian vim时(vim --version | grep clip#显示没有剪贴板支持),我可以在按住Shift键并用鼠标选择文本后复制到剪贴板,就像任何 其他诅咒计划。 正如我从@Conner的评论中看到的那样,终端(在我的情况下是gnome-terminal)在感知到我的Shift按下时关闭了它的鼠标事件报告。 我想基于curses的程序可以在将某个Escape序列发送到终端后接收鼠标事件。
eel ghEEz answered -12-24T03:14:21Z
0 votes
如果您在Windows上并且想要使用p粘贴系统剪贴板的内容,请键入此命令。
:set clipboard = unnamed
这解决了我的问题。
vincent mathew answered -12-24T03:14:46Z
0 votes
有两种简单的方法可以做到这一点。 使文件处于插入模式和1)按下鼠标中的中间按钮(滚轮),或2)Ctrl + Shift + V.
user1898814 answered -12-24T03:15:06Z
0 votes
对于某些国际键盘,您可能需要按“+ Space”以获得"。
因此,在这种情况下,您必须按“Space + y或”Space * y进行复制。
并且“Space + p或”Space * p要粘贴。
Arthur F answered -12-24T03:15:35Z
0 votes
如果您在MAC OSX中使用vim,不幸的是它附带旧版本,并且不符合剪贴板选项。 幸运的是,自制软件可以轻松解决这个问题。
安装vim:
yy
安装gui版的vim:
yy
重启终端才能生效。
将以下行附加到yy
set clipboard=unnamed
现在您可以使用yy复制vim中的行并在系统范围内粘贴它。
anonymous answered -12-24T03:16:30Z
0 votes
如果你想改变你的vimrc等其他解决方案是好的...但是我想要一个简单的方法从vim复制到我的系统键盘。 这就是我提出的。
使用可视模式选择要复制的文本y *
按y *(它将自动扩展为显示y +)
键入y *或y +(取决于您的系统)将选定的文本拉到系统剪贴板
NateW answered -12-24T03:17:03Z
0 votes
最简单的解决方案,也可以通过ssh -Y machine在不同的Linux机器之间工作:
检查vim是否支持X-11剪贴板:ssh -Y machine。如果报告回-clipboard和-xterm_clipboard,则应安装vim-gtk或vim-gnome(gvim on arch linux)
将以下行添加到您的ssh -Y machine:
ssh -Y machine
如果您通过ssh在其他计算机上登录,请使用选项-Y:ssh -Y machine
现在复制和粘贴应该在单个和不同的机器上完全按预期工作,只需使用y用于yank,p用于粘贴。 NB在要使用此功能的所有计算机上修改.vimrc。
chao answered -12-24T03:17:46Z
0 votes
如果您先使用鼠标
:set paste
然后将粘贴right click mouse和缓冲区中的内容
Mohammed Rafeeq answered -12-24T03:18:10Z