与其他编辑器不同,vim商店将文本复制到自己的剪贴板中。因此,我很难从网页复制一些文本并将其粘贴到当前的工作文件中。碰巧我必须打开gedit或手动输入它。
我可以从系统的剪贴板进行vim粘贴吗?
答案 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-gtk
或vim-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系统上,+
和*
寄存器映射到X11选择,可以使用鼠标中键粘贴。使用:set clipboard=unnamed
和:set clipboard=unnamedplus
时,寄存器会映射到剪贴板,并可以使用CTRL-V进行粘贴。
具体细节似乎与配置和系统有关,因此您的里程肯定会有所不同。不过,它肯定会让你指向正确的方向。
答案 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)
我认为这个问题应该得到一个更客观的答案。
进入粘贴模式
离开粘贴模式
您粘贴了文字,然后又可以再次输入。
答案 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 应用程序不常使用选择。
答案 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
选项进行编译,因此对我来说,解决方法是:
clipboard
brew install vim
添加到我的set clipboard+=unnamed
文件中~/.vimrc
答案 14 :(得分:1)
使用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功能。此功能称为“包围式粘贴”。有关更多详细信息,请参见Turning off auto indent when pasting text into vim
答案 15 :(得分:1)
如果有,请尝试将其从vimrc中删除: 设置mouse = a
它与粘贴功能搞混了。
答案 16 :(得分:1)
复制到系统剪贴板:
"+y
从系统的剪贴板粘贴一些东西:
"+P
在光标前粘贴/"+p
在光标后粘贴。答案 17 :(得分:1)
通过ssh
在不同Linux机器之间工作的最简单的解决方案是:
检查vim是否支持X-11剪贴板:vim --version | grep clipboard
。如果它报告-clipboard
和-xterm_clipboard
,则应安装vim-gtk
或vim-gnome
(gvim on arch linux)
将以下行添加到.vimrc
:
set clipboard=unnamedplus set paste
ssh -Y machine
现在,复制和粘贴应该在单个和不同的计算机上完全按预期工作,只需使用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
:从数字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
按钮从剪贴板粘贴。