选择垂直块后如何在光标前粘贴?

时间:2010-11-01 22:47:22

标签: vim keyboard-shortcuts copy-paste

我很确定这必须存在,但如果它不存在,那么可能有一个宏......

我最喜欢的vim功能之一是在视觉模式之前插入(<C-v>,选择行,<C-I>,输入一点,然后 Esc

我的问题是我想先粘贴剪贴板内容,而不是'插入'。我试过<C-P>但没有爱。

我已经阅读了备忘单,到处搜索,查看了这里的问题并没有找到它,但我绝对可以找到错误的东西。

4 个答案:

答案 0 :(得分:139)

通常, P 命令(大写不同于 p )在光标位置之前粘贴剪贴板的内容。这就是你要找的东西吗? (当你说按Command + I时,我不太清楚你是什么意思,因为我的键盘上没有Command键。)

答案 1 :(得分:15)

我认为你的意思是在视觉块模式下使用I在多行上插入相同的文本,其中点击p只是粘贴在当前行而不是所有选定的行上。

在插入模式下,您可以点击C-r后跟一个寄存器来插入该寄存器的内容,因此如果您想粘贴未命名的缓冲区,则输入

C-r"

同样,要从剪贴板粘贴

C-r* 

通过像往常一样输入插入,然后使用C-r,您将获得所有选定行的文字。

查看:h registers以了解您可以使用哪些寄存器。

答案 2 :(得分:0)

五月似乎晚了,但我遇到了同样的问题。

例如有两行的文件:

foo
酒吧

  1. 按v:视觉模式 在虚拟模式下选择foo
  2. 按y:复制
  3. 将光标移到“ b” ar

4-1。 按p => bfooar

4-2。 按P(Shift + P)=> foobar 这是我所期望的。

TLDR:大写字母P(shift + p)

答案 3 :(得分:0)

基于 Alligator 解决方案,使用地图。

例如在 3 种情况下粘贴字符串 _s_

" |-- original --|-- pasted after C   --|-- pasted before C  --|-- pasted replacing C   --|
" |--------------|------------------------------------------------------------------------|
" |--          --|-- select column C  --|-- select column B  --|-- select column C      --|   --> step 0 (after copying/yanking a string) 
" |--          --|-- press <leader>py --|-- press <leader>py --|-- press p              --|   --> step 1 if yanked
" |--          --|-- press <leader>pc --|-- press <leader>pc --|-- press "+p            --|   --> step 1 if copied to clipboard
"       ABCD              ABC_s_D               AB_s_CD                 AB_s_D 
"       ABCD              ABC_s_D               AB_s_CD                 AB_s_D 
"       ABCD              ABC_s_D               AB_s_CD                 AB_s_D 

每个寄存器的映射(分别被拉出或复制)在哪里:

xnoremap <leader>py A<C-r>*<Esc>
xnoremap <leader>pc A<C-r>+<Esc>

在之前的示例中,我粘贴了列之后(即使粘贴在 C 列之前,我的解决方法是粘贴在 B 列之后)。如果需要在 before 粘贴,只需将 2 个映射中的 A 更改为 I

代替 "+p,可以使用普通的 p,如果之前:将 + 复制到 * 寄存器(表的最后一种情况需要):

nnoremap <leader>z :let @*='<C-r>+'<CR>