选中垂直块后如何粘贴到光标前?

问题描述 投票:0回答:5

我很确定这一定存在,但如果它不存在,也许有一个宏...

我最喜欢的 vim 功能之一是在可视模式之前插入(

<C-v>
,选择行,
<C-I>
,键入一点,然后 Esc)。

我的问题是我想粘贴之前的剪贴板内容,而不是“插入”。我试过

<C-P>
但没有爱。

我已经阅读了备忘单,到处搜索,浏览了这里的问题但没有找到它,但我肯定是在寻找错误的东西。

vim keyboard-shortcuts copy-paste
5个回答
174
投票

一般情况下,P命令(大写,不同于p)将剪贴板中的内容粘贴到光标位置之前。那是你要找的吗? (我不太清楚你说按 Command+I 是什么意思,因为我的键盘没有 Command 键。)


20
投票

我假设你的意思是在可视块模式下使用

I
在多行上插入相同的文本,其中点击
p
只是粘贴到当前行而不是所有选定的行。

在插入模式下,您可以点击

C-r
后跟一个寄存器来插入该寄存器的内容,所以如果您想粘贴未命名的缓冲区,您可以输入

C-r"

同样,从剪贴板粘贴

C-r* 

通过像往常一样输入插入,然后使用

C-r
,您将获得所有选定行的文本。

看看

:h registers
看看你可以使用哪些寄存器。


1
投票

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

例如有两行的文件:


酒吧

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

4-1。 按 p => bfooar

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

TLDR:大写 P(shift + p)


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>

0
投票

例如,我们需要在单词Fish之前的4行插入My

def EatMyFish(x):
    return x - 1

a = EatFish(1)
b = EatFish(2)
c = EatFish(3)
d = EatFish(4)
  1. 复制我的
    def EatMyFish(x):
  2. 将光标放在 F 的行
    EatMyFish(1)
  3. ctrl-v
    垂直选择
  4. 3j
    选择列中的所有F
  5. I
    进入所有 4 行的编辑模式
  6. ctrl-o
    一个动作的正常模式(记住:o =一次或一次)
  7. P
    在光标前插入(不小
    p

  1. ctrl-r "
    在插入模式下,而不是上面的 6-7

无论如何,现在我们有:

def EatMyFish(x):
    return x - 1

a = EatMyFish(1)
b = EatMyFish(2)
c = EatMyFish(3)
d = EatMyFish(4)
© www.soinside.com 2019 - 2024. All rights reserved.