![在 vim 中的一行前粘贴多行?](https://linux22.com/image/1341599/%E5%9C%A8%20vim%20%E4%B8%AD%E7%9A%84%E4%B8%80%E8%A1%8C%E5%89%8D%E7%B2%98%E8%B4%B4%E5%A4%9A%E8%A1%8C%EF%BC%9F.png)
如何复制多行并将其作为块粘贴在行前?例如,我有以下代码,我想将 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