是否可以在Vim中以插入模式粘贴?
答案 0 :(得分:412)
在插入模式下点击CTRL-R {register}
示例:
CTRL-R *
将插入剪贴板的内容CTRL-R "
(未命名的寄存器)插入最后一次删除或猛拉。 要在vim的帮助中找到这个,请输入:h i_ctrl-r
答案 1 :(得分:218)
如果您不希望Vim在传入的粘贴文本中修改格式,您可能还需要考虑使用::set paste
。这将阻止Vim重新标记您的代码。完成粘贴后,:set nopaste
将恢复正常行为。
也可以通过向.vimrc添加类似set pastetoggle=<F2>
的内容,使用单个键切换模式。有关切换自动缩进的更多详细信息为here。
答案 2 :(得分:117)
不是没有直接。你可以做的是使用 Ctrl-O 进行单一正常模式操作的快速退出插入模式,然后从那里粘贴将结束让你回到插入模式。
Key Combo: Ctrl-O p
编辑:有趣。似乎有其他几个人列出的方式。
答案 3 :(得分:26)
您可以使用此选项从剪贴板粘贴 Ctrl v :
set pastetoggle=<F10>
inoremap <C-v> <F10><C-r>+<F10>
这是用 Ctrl c 将视觉选择拖入剪贴板:
vnoremap <C-c> "+y
如果您还希望在正常模式下默认使用剪贴板进行经典vim yanking /粘贴( y / p ),这里有一个配置选项:
set clipboard=unnamedplus
使用此配置,您可以例如首先在正常模式下猛拉,然后在插入模式下使用 Ctrl v 进行粘贴。此外,您可以粘贴来自不同vim实例和不同应用程序的文本。
另一种选择是:
set clipboard=unnamed
然后,您可以通过在X环境中拖动鼠标来选择某些内容,然后将其粘贴到vim中。但是(出于某种原因)你不能在Vim中抽出一些东西( y )而 shift 在其他地方插入 ,这可能是非常有限的。
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
:
+xterm_clipboard
您可以在vim --version
提供的信息中找出您的vim是否包含{{1}}。
答案 4 :(得分:26)
在插入模式下,您可以使用Ctrl-R {register}
,其中 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
答案 5 :(得分:19)
如果您将Vim设置为使用系统剪贴板(:set clipboard=unnamed
),则可以使用 Shift + Insert 粘贴您在Vim中复制的任何文本。 Shift + Insert 只是一个OS范围的粘贴键组合( Ctrl + Insert 是相应的'副本' “)。
答案 6 :(得分:18)
您也可以使用鼠标中键粘贴插入模式(仅限Linux)。
答案 7 :(得分:5)
您可以通过以下方式进入-- INSERT (past) --
模式:
或
:set paste
并进入插入模式(:set nopaste
禁用)一旦进入-- INSERT (past) --
模式,只需在Linux上使用系统粘贴功能(例如 Ctrl Shift v , Cmd v 在Mac OS上)。
当使用vim over ssh时,此策略非常有用。
答案 8 :(得分:4)
是。在Windows Ctrl + V和Linux中几乎同时按下两个鼠标按钮。
在Windows中我认为我的_vimrc中的这一行可能会这样做:
source $VIMRUNTIME/mswin.vim
在Linux中我不记得我是怎么做到的。看起来我可能从默认的.vimrc文件中删除了一些行。
答案 9 :(得分:0)
在这种情况下,自定义地图似乎是合适的。这就是我用来在插入模式下粘贴被拽物品的方法:
inoremap <Leader>p <ESC>pa
我的Leader
密钥是\
;这意味着在插入模式下点击\p
将粘贴先前被拉动的项目/行。
答案 10 :(得分:0)
只需添加地图:
" ~/.vimrc
inoremap <c-p> <c-r>*
重新启动vim,然后在插入模式下按Crtl+p
,
复制的文本将被粘贴