小智 431
在插入模式下命中 CTRL-R {register}
例子:
CTRL-R * 将插入剪贴板的内容 CTRL-R " (未命名的寄存器)插入最后一个删除或猛拉. 要在vim的帮助类型中找到它 :h i_ctrl-r
Jam*_*der 226
如果您不希望Vim在传入的粘贴文本中修改格式,您可能还需要考虑使用::set paste.这将阻止Vim重新标记您的代码.完成粘贴后,:set nopaste将恢复正常行为.
通过添加类似于set pastetoggle=<F2>.vimrc 的内容,也可以使用单个键切换模式.有关切换自动缩进的更多详细信息,请点击此处.
Jar*_*Par 122
不,不是直接的. 你可以做的是快速退出插入模式进行单个正常模式操作,Ctrl-O然后从那里粘贴,最后将你放回插入模式.
重点组合: Ctrl-O p
编辑:有趣.似乎有其他几个人列出的方式.
Zaz*_*Zaz 27
在插入模式下,您可以使用Ctrl-R {register},其中寄存器可以是:
+ 对于剪贴板,* 对于X剪贴板(X中最后选择的文本), " 对于未命名的寄存器(最后删除或在Vim中猛拉),:h registers).Ctrl-R {register} 插入文本,就像输入一样.
Ctrl-R Ctrl-O {register} 插入带有原始缩进的文本.
Ctrl-R Ctrl-P {register} 插入文本并自动缩进.
Ctrl-O可用于在返回插入模式之前运行任何正常模式命令,因此
Ctrl-O "+p也可以使用,例如.
有关更多信息,请查看文档 :h i_ctrl-r
cli*_*ime 26
您可以使用此选项从剪贴板粘贴Ctrlv:
set pastetoggle=<F10>
inoremap <C-v> <F10><C-r>+<F10>
Run Code Online (Sandbox Code Playgroud)
这用于将视觉选择放入剪贴板中Ctrlc:
vnoremap <C-c> "+y
Run Code Online (Sandbox Code Playgroud)
如果您还希望在正常模式下使用剪贴板进行经典vim yanking /粘贴(y/ p),这里有一个配置选项:
set clipboard=unnamedplus
Run Code Online (Sandbox Code Playgroud)
使用此配置,您可以例如在正常模式下首先猛拉然后以Ctrlv插入模式粘贴.此外,您可以粘贴来自不同vim实例和不同应用程序的文本.
另一种选择是:
set clipboard=unnamed
Run Code Online (Sandbox Code Playgroud)
然后你就可以在X环境中通过鼠标拖动选择一些东西,然后将其粘贴到vim中.但是(出于某种原因)你将无法y在Vim和shiftinsert其他地方猛拉某些东西(),这可能是非常有限的.
Vim关于此的文档:http://vim.wikia.com/wiki/Accessing_the_system_clipboard
对于从自定义寄存器粘贴,您可以按照其他答案:).这个答案主要是关于将Vim与系统剪贴板集成.
请注意,set clipboard=unnamedplus和set clipboard=unnamed工作,你需要使用gvim的或vimx( vim-X11):那些被编译+xterm_clipboard.你可以选择将它放入你.bashrc的别名vim中vimx:
if [ -e /usr/bin/vimx ]; then
alias vim='/usr/bin/vimx'; # vim with +xterm_clipboard
fi
Run Code Online (Sandbox Code Playgroud)
您可以查看您的vim是否包含所+xterm_clipboard提供的信息vim --version.
小智 19
如果将Vim设置为使用系统剪贴板(:set clipboard=unnamed),则可以使用Shift+ 粘贴在Vim中复制的任何文本Insert.Shift+ Insert只是一个OS范围的粘贴键组合(Ctrl+ Insert是相应的'副本').
您可以-- INSERT (past) --通过以下方式进入
要么
:set paste并进入插入模式(:set nopaste禁用)一旦进入-- INSERT (past) --模式,只需使用您的系统粘贴功能(例如CtrlShiftv在Linux上,Cmdv在Mac OS上).
当使用vim over ssh时,此策略非常有用.