使用视觉块模式:
y3j
<C-v>3j
I0<Esc>
'>
p
<C-v>3j
I1<Esc>
可以从1
填充开始并使用P
跳过'>
:
y3j
<C-v>3j
I1<Esc>
P
<C-v>3j
I0<Esc>
仅使用 Ex 命令:
:,+3y<CR>
:,+3norm! I0<CR>
:put
:<Up> "use commandline history to save some typing
<Backspace>1<CR>
混合使用替换和正常模式命令:
y3j
:,+3s/^/0<CR>
p
:<Up>
<Backspace>1<CR>
如果您经常这样做,那么将其记录在宏中可能是最好的策略。那时,实际填充的完成方式并不真正相关,因为您所做的唯一输入是@x
并且宏可能无论如何都是即时的。
你在录制过程中做了什么并不重要,这里有一个例子:
qx
y3j
:,+3s/^/0<CR>
p
:,+3s/^/1<CR>
q
假设你有这个:
[0]0
01
10
11
击中@x
将上述变为:
000
001
010
011
100
101
110
111
您的宏已保存到寄存器x
中,并且仍可用于您的下一个 Vim 会话。
而且我敢肯定,有人会想出一个不错的单班轮。
编辑
上面宏的逐步解释:
qx
,开始在寄存器中录制x
(它可以是任何可用的寄存器)。
y3j
,拉出当前行和接下来的三个。
:
,无需解释。
,+3
,这是我们正在研究的范围。定义此范围的更正确方法是.,+3
. 范围的开始行和结束行用逗号分隔。
起始行是当前行,我们可以省略它以节省一些输入,所以我们留下逗号,然后是结束行,相对于当前行表示,+3
.
s/^/0<CR>
,这是一个简单的替换。
搜索模式中的^
表示“行首”。它与第一个字符不匹配,因此它非常适合像这样的情况,我们想在一行中添加一些东西。
所以,基本上我们在该行前面加上0
. 它可以是你想要的任何东西。
当您对范围执行替换时,将在范围的每一行上执行替换。在这里,我们有四行,所以每行都以0
.
<CR>
, 是,嗯……<Enter>
用于执行替换的键。
p
,将我们之前拉出的四行粘贴到当前行下方。
:,+3s/^/1<CR>
, 和以前一样,但带有1
.
q
, 结束录音。
而且,为了回答您的评论,您可以这样做:
00
01
10
11
进入那个:
00 0.0
01 0.0
10 0.0
11 0.0
您需要使用另一个“锚”。^
是“行首”,$
是“行尾”,所以替换变成:
:,+3s/$/ 0.0