在插入模式下粘贴?

是否可以在Vim中以插入模式粘贴?

240290 次浏览

不,不直接。你能做的是快速退出插入模式,使用Ctrl-O进行一个普通模式操作,然后从那里粘贴,最后将你放回插入模式。

组合键:Ctrl-O p

编辑:有趣。正如其他几个人所列出的那样,似乎是有办法的。

如果你设置Vim使用系统剪贴板(:set clipboard=unnamed),那么你在Vim中复制的任何文本都可以使用转变 + 插入来粘贴。转变 + 插入只是一个操作系统范围内的粘贴键组合(Ctrl + 插入是对应的“复制”)。

当处于插入模式时,点击CTRL-R {register}

例子:

  • CTRL-R *将插入剪贴板的内容
  • CTRL-R "(未命名寄存器)插入最后一个delete或yank。

要在vim的帮助中找到它,键入:h i_ctrl-r

是的。在Windows Ctrl+V和Linux中几乎同时按下两个鼠标按钮。

在Windows中,我认为我的_vimrc中的这一行可能做到了:

source $VIMRUNTIME/mswin.vim

在Linux中,我不记得我是怎么做到的。看起来我可能从默认的.vimrc文件中删除了一些行。

如果你不想让Vim在传入的粘贴文本中破坏格式,你可能还想考虑使用::set paste。这将防止Vim重新标记您的代码。粘贴完成后,:set nopaste将恢复正常行为。

通过在.vimrc中添加set pastetoggle=<F2>之类的东西,也可以用一个键切换模式。有关切换自动缩进的更多详细信息请参见在这里

还可以使用鼠标中间按钮在插入模式下粘贴(仅适用于Linux)。

你可以使用Ctrlv从剪贴板粘贴:

set pastetoggle=<F10>
inoremap <C-v> <F10><C-r>+<F10>

这是为了用Ctrlc将可视选择拖到剪贴板中:

vnoremap <C-c> "+y

如果你也想在正常模式下默认使用剪贴板进行经典的vim拖拽/粘贴(y/p),这里有一个配置选项:

set clipboard=unnamedplus

有了这个配置,你可以先在正常模式下拉取,然后在插入模式下粘贴Ctrlv。此外,还可以粘贴来自不同vim实例和不同应用程序的文本。

另一种选择是:

set clipboard=unnamed

然后,您就可以在X环境中通过鼠标拖动选择一些东西,然后将其粘贴到vim中。但是(出于某种原因)你将不能在Vim中删除一些东西(y),然后在其他地方删除转变插入,这可能是非常有限的。

Vim文档关于这个:http://vim.wikia.com/wiki/Accessing_the_system_clipboard

对于从自定义寄存器粘贴,您可以遵循其他答案:)。这个答案主要是关于如何将Vim与您的系统剪贴板集成。


注意,要让set clipboard=unnamedplusset clipboard=unnamed工作,你需要使用gvim或vimx (vim-X11):它们是用+xterm_clipboard编译的。你可以选择把它放到你的.bashrc中,用vimx来别名vim:

if [ -e /usr/bin/vimx ]; then
alias vim='/usr/bin/vimx'; # vim with +xterm_clipboard
fi

你可以在vim --version提供的信息中找到你的vim是否有+xterm_clipboard

在插入模式下,你可以使用Ctrl-R {register},其中注册可以是:

  • +为剪贴板,
  • *用于X剪贴板(X中最后选择的文本),
  • "用于未命名寄存器(Vim中的最后一次删除或yank),
  • 或其他一些(参见:h registers)。

Ctrl-R {register}插入文本,就像输入文本一样。

Ctrl-R Ctrl-O {register}用原始缩进插入文本。

Ctrl-R Ctrl-P {register}插入文本并自动缩进它。

Ctrl-O可用于在返回插入模式之前运行任何正常模式命令,因此
Ctrl-O "+p也可用于例如。

有关更多信息,请使用:h i_ctrl-r查看文档

你可以通过以下方式进入-- INSERT (past) --模式:

  • 键盘组合:y p

  • :set paste和进入插入模式(:set nopaste禁用)

一旦进入-- INSERT (past) --模式,只需使用您的系统粘贴函数(例如,Linux上的Ctrl转变v, Mac OS上的Cmdv)。

当通过ssh使用vim时,这个策略非常有用。

插入模式粘贴

在这种情况下,自定义映射似乎比较合适。这是我在插入模式中粘贴拉拽项的方法:

inoremap <Leader>p <ESC>pa

我的Leader键是\;这意味着在插入模式下点击\p将粘贴先前拉出的项/行。

只需添加地图:

" ~/.vimrc
inoremap <c-p> <c-r>*

重启vim,在插入模式下按Crtl+p, 复制的文本将被粘贴

将此添加到vimrc或init文件中:

imap <silent> PP <ESC>pa

..在插入模式下用“PP"并保持在插入模式..