这个疯狂的 vim 寄存器巫术(递增 alpha 寄存器)可以在宏中实现吗?

这个疯狂的 vim 寄存器巫术(递增 alpha 寄存器)可以在宏中实现吗?

我有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"GoEsc"yp^A0"yy$dd^Oj0q

该策略是使用一个宏 ( y) 来跟踪接下来要使用的寄存器,并使用另一个宏对其进行修改。

  • f"l@yyf"是来自你的原创,只是我用@y它来代替"a。我们使用y宏来键入"a而不是直接键入。
  • GoEsc"yp转到文件末尾,在其中添加一个新行,然后粘贴 register 的内容y
  • ^A增加光标下的字母。如果是的话a,现在就是了b。我们nrformats=alpha提前设置,以便这适用于字母。
  • 0"yy$将更新后的文本拉回到寄存器中y
  • dd^O清理我们的起跑线并跳回之前的位置,并且
  • j0是你原来的其余部分。

相关内容