在 vim 中的一行前粘贴多行?

在 vim 中的一行前粘贴多行?

如何复制多行并将其作为块粘贴在行前?例如,我有以下代码,我想将 if 语句后的三行复制并粘贴到 else 语句之后但在其下方的行之前。

[row col] = find(H);  
if (nargin < 4)    

    delqmn = sparse(row, col, 0, M, N); % diff of msgs from bits to checks
    delrmn = sparse(row, col, 0, M, N);% diff of msgs from checks to bits
    rmn0 = sparse(row, col, 0, M, N);% msgs from checks to bits (p=0)
else

// Insert 3 lines after if statement here

qn0 = 1-r;% pseudoposterior probabilities
qn1 = r;% pseudoposterior probabilities

谢谢

答案1

你可以从 vim 本身找到很多有用的信息

:help registers

简而言之,要复制多行,请使用:#yy 其中 # 是要复制的行数

要粘贴这些行,请使用P粘贴在光标上方和p粘贴在光标下方。

如果您一次复制一行(复制yy三次),您将把文本复制到三个寄存器中。为了将这些行粘贴回去,您可以使用“#p(其中 # 是寄存器编号)”从每个寄存器中粘贴。如果复制的文本不在连续的块中,这是一种很好的方法。

答案2

正如 Heptite 所写,这是基本的东西。vimtutor规则。

如果您好奇,这里有一些稍微“高级”的方法来实现您想要的功能。假设您的光标位于要复制的块的第一行,并且您有set number,则以下所有方法都会产生相同的结果。当然,您可以结合使用它们的各个部分来满足您的需求,这是远的不是一个详尽的清单。

3yy/els<cr>p
    3yy      yank 3 lines starting with the current one
    /els<cr> position the cursor on else
    p        put the content of the default register after the cursor

y2j7Gp
    y2j      yank until 2 lines below
    7G       move the cursor to line 7
    p        put the content of the default register after the cursor

3yy}P
    3yy      yank 3 lines starting with the current one
    }        place the cursor on the next blank line        
    P        put the content of the default register before the cursor

V2j:t+3
    V2j      visually select linewise until 2 lines below
    :        enter command-line mode, a range is inserted for you
    t+3      copy the selected lines after line (current line + 3)

:4,6t7
    :        enter command-line mode
    4,6      the line numbers of the block you want to copy, see :help range
    t7       copy those lines after line 7

相关内容