以插入模式粘贴?


Answers:


465

在插入模式下命中 CTRL-R {register}

例子:

  • CTRL-R * 将插入剪贴板的内容
  • CTRL-R " (未命名的寄存器)插入最后的删除或取消。

要在vim的帮助中找到此内容 :h i_ctrl-r


13
是的,我最近才了解CTRL-R,它非常有用。

16
CTRL-R *仅适用于GVIM或编译为与x交互的版本。输入vim --version并查找+xterm_clipboard。如果没有,则需要其他版本的vim。(vim.wikia.com/wiki/Accessing_the_system_clipboard
Conrad.Dean

10
实际上+clipboard,您实际上只需要,但是如果有的+xterm_clipboard话,无论如何都应该拥有它。在某些操作系统xterm_clipboard上不适用。
安德鲁·马歇尔

1
嗯,我使用C-r +从Windows的系统剪贴板中粘贴(使用GVim Portable)?从未听说过*注册。
kitsu.eb 2012年

6
@ kitsu.eb在X系统上*,单击鼠标中键即可+将其粘贴,而传统的复制/粘贴操作则可以使用。standard.freedesktop.org/clipboards-spec/clipboards-latest.txt
amc

235

如果您不希望Vim破坏输入的粘贴文本中的格式,则可能还需要考虑使用::set paste。这样可以防止Vim重新标记您的代码。完成粘贴后,:set nopaste将恢复正常行为。

通过向set pastetoggle=<F2>.vimrc中添加类似内容,也可以通过一个键来切换模式。有关切换自动缩进的更多详细信息,请参见此处


47
:set nopaste将禁用粘贴模式
James Snyder

24
@JamesSnyder更好的方法是:set paste!在命令历史记录中将粘贴设置得很近,因此您只需按':',然后向上箭头并添加'!'。
拉斐尔·巴博萨

6
只是好奇- :set paste! 谢谢是什么是更好还是不同:)
迈克尔·杜兰特

33
!在命令的最终vim切换接通和断开命令。这样,您不必键入:set nopaste,就可以向上滚动历史记录并:set paste!再次运行相同的命令()。
에이바2013年

3
@blockloop您应该在粘贴时启用它,然后立即禁用它。
NieDzejkob

125

不,不是直接。 但是,您可以做的是快速退出插入模式,以进行单个普通模式操作,Ctrl-O然后从那里粘贴,最后将您置于插入模式,结束操作。

关键组合: Ctrl-O p

编辑:有趣。看来确实有其他几种人列出来的方法。


2
ctrl-r“对我不起作用(终端中的os x,vi)。ctrl-o p起作用。–
Bob

4
这是最快最简单的记忆方式。
pinpox

esc + p
sitilge

2
比绝对快,比esc + p + i打字更容易CTRL-R + "
lucidbrot

实际上,这有时与的行为有所不同CTRL-R "。例如,尽管vimrc设置可以更改此设置,但是使用粘贴到新行中的内容CTRL-O p会使其缩进消失。
noname

30

在插入模式下,您可以使用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


4
这个答案似乎是最全面的。这很清楚,我认为最有帮助。它简要回答了OP的问题,然后回答了一些问题。
Devvyn

26

您可以使用它从剪贴板粘贴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中。但是(由于某种原因)您将无法y在Vim中拖拽某些东西(),然后再拖shiftinsert到其他地方,这可能是非常有限的。

有关此的Vim文档:http : //vim.wikia.com/wiki/Accessing_the_system_clipboard

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


请注意,对于set clipboard=unnamedplusset clipboard=unnamed工作,你需要使用gvim的或vimx( vim-X11):那些被编译的+xterm_clipboard。您可以选择将其放入.bashrc别名vimvimx

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

您可以在vim +xterm_clipboard提供的信息中找到您的vim vim --version


7
这正是我想要的。这也是这里唯一合理的答案。这就是人们期望事情起作用的方式。有谁知道为什么:set paste和拜占庭的默认行为<leader><leader> * y甚至是遥不可及的?不要听起来太投入,我真的很好奇这反映了什么vim哲学,或者仅仅是历史的不幸。
Aeschylus

您的回答使我也可以inoremap <S-Insert> <F12><C-r>+<F12>在Gvim中使用Shift + Insert (我将F12用作pastetoggle)。谢谢。
sromero '16

20

如果将Vim设置为使用系统剪贴板(:set clipboard=unnamed),则可以使用Shift+ 粘贴在Vim中复制的任何文本InsertShift+ Insert只是整个操作系统范围内的粘贴键组合(Ctrl+ Insert是相应的“副本”)。


1
不了解S-Insert :)
BandGap 2012年

这会相反吗?将p文本粘贴到剪贴板中吗?
Zaz

在使用Shift + Insert粘贴文本之前,我们需要处于插入模式。
jdhao

18

您也可以使用鼠标中键在插入模式下粘贴(仅Linux)。


106
您说的这只老鼠是什么?
Jim Mitchener 2012年

19
您所说的这些非Linux操作系统是什么?
布鲁诺·布罗诺斯基

-1:此答案高度依赖于硬件和终端设置。最终,鼠标上的按钮将向终端发送一个预设的字符串,然后终端解析该字符串以执行某个命令。问题是,这可能会很大不同,具体取决于终端设置。要改善此答案,请至少向我们提供终端的版本,操作系统以及您使用的鼠标的版本和型号。
melvynkim 2014年

鼠标中键粘贴在所有Linux应用程序中都很常见,不受终端或操作系统版本的限制。
lcltj 2014年

在Arch Linux + urxvt中不起作用。它仅添加新行。
zygimantus

5

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

  • 键盘组合: y p

要么

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

一旦进入-- INSERT (past) --模式,只需使用系统粘贴功能(例如,CtrlShiftv在Linux上,Cmdv在Mac OS上)。

在ssh上使用vim时,该策略非常有用。


4

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

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

source $VIMRUNTIME/mswin.vim

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


我可以投票一次以上吗?我只想从另一个窗口粘贴时粘贴-所以我总是在鼠标上。辉煌!
戴夫

在Linux中,您可以通过按下鼠标中键进行粘贴。如果您有两个按钮的鼠标并同时按下向左和向右按钮,则需要“ Emulate3Buttons”或类似按钮才能以这种方式工作。
Cougar

0

以插入模式粘贴

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

inoremap <Leader>p <ESC>pa

我的Leader钥匙是\; 这意味着\p在插入模式下点击会粘贴之前选中的项目/行。


0

只需添加地图:

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.