我想快速修改文档
00
01
10
11
看起来像
000
001
010
011
100
101
110
111
当然,我可以用蛮力来完成(如上所示),但我想快速完成,因为我发现我正在做很多这样的事情。到目前为止,我的方法是猛拉和粘贴 4Y 4j 4P
00
01
10
11
00
01
10
11
那么是否有命令在每行之前插入 0 4 次?我知道它类似于 4, 0, i, 0, esc ~~我希望它是 4 轮 0(移动到行的左侧),插入模式,插入 0,重新输入命令模式。
谢谢
最佳答案
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>
:,+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 session 。而且我敢肯定有人可以想出一个不错的单衬。
编辑
以上宏的分步说明:
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
您需要使用另一个“ anchor ”。
^
是“行的开始”,$
是“行尾”,所以替换变成::,+3s/$/ 0.0
关于vim - 在 VIM 中自动插入之前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15106402/