我有4行。
foo ["bar"]
baz ["k"]
daskhfkjhadsfj ["askfjhfjdsh"]
dfjhafkjhfha ["skkksks"]
我想做一个宏,它接受单词并将其拉入寄存器,但我希望寄存器递增。例如:
f"l"ayf"j0
f"l"byf"j0
f"l"cyf"j0
f"l"dyf"j0
有没有办法以寄存器自动增量的方式完成此命令,以便我稍后可以粘贴它们:
jjjj
f"ap
j
f"bp
我知道寄存器编号和 yi” - 我想将其与 alpha 寄存器一起使用。我也知道我选择的寄存器可能会发生冲突:您可以假设我的宏将记录在 z 和我想使用 af 来表示所使用的寄存器。
您能建议一种使用宏来完成此任务的方法吗?
答案1
和A宏?或许。和二宏,当然!
首先进行一些设置:
:set nrformats=alpha
:let @y="\"a"
现在一些疯狂的 Vim 注册巫术:
qzf"l@yyf"Go
Esc"yp
^A0"yy$dd
^Oj0q
该策略是使用一个宏 ( y
) 来跟踪接下来要使用的寄存器,并使用另一个宏对其进行修改。
f"l@yyf"
是来自你的原创,只是我用@y
它来代替"a
。我们使用y
宏来键入"a
而不是直接键入。Go
Esc"yp
转到文件末尾,在其中添加一个新行,然后粘贴 register 的内容y
。- ^A增加光标下的字母。如果是的话
a
,现在就是了b
。我们nrformats=alpha
提前设置,以便这适用于字母。 0"yy$
将更新后的文本拉回到寄存器中y
。dd
^O清理我们的起跑线并跳回之前的位置,并且j0
是你原来的其余部分。