2

我做了一个简单的宏来增加 json 对象中的数字,如下所示:

{
    image: 'images/2.jpg',
    thumb: 'images/2-thumb.jpg',
    big: 'images/2.jpg',
    title: '',
    description: '',
    link: 'images/2.jpg'
},

和:

q, n, shift-v, down-till-end, p, move-to-numbers, c-a, return-to-top, q, 150@n

(抱歉,如果这不是在 SE 中发布 vim 宏的适当语法)

它有效,但直到 9 日才会增加。我错过了什么?

提前致谢。

编辑:

我试图达到这样的目标:

{
    image: 'images/3.jpg',
    thumb: 'images/3-thumb.jpg',
    big: 'images/3.jpg',
    title: '',
    description: '',
    link: 'images/3.jpg'
},
{
    image: 'images/4.jpg',
    thumb: 'images/4-thumb.jpg',
    big: 'images/4.jpg',
    title: '',
    description: '',
    link: 'images/4.jpg'
},
... until *nth* value
4

4 回答 4

4

假设您的光标位于第一个左括号上,这是一种方法:

qn                    " start recording in register n
V%                    " select from here to the closing bracket, linewise
y                     " yank the selection
%                     " jump to the closing bracket
p                     " paste after the current line
:'[,']norm <C-v><C-a> " executing the normal mode command <C-a>(1) on all the lines that we just pasted
q                     " stop recording

然后做150@n

(1)<C-v><C-a>用于插入文字^A

于 2013-03-15T20:46:52.523 回答
1

尝试这个:

进入可视模式并选择要包含在宏执行中的行类型:

:normal @n

然后,当您按 Enter 时,宏将应用于选定的行

于 2013-03-15T20:14:51.613 回答
0

我试了一下:

qqv%:s/\d\+/\=submatch(0)+1/^M[[yGGp

简短的解释

qq                              "recording to register q
v%                              "select things between { and }
:s/\d\+/\=submatch(0)+1/^M      "just do +1 to all numbers (selected range)
[[                              "back to begin {
yG                              "yank till the end
Gp                              "paste at the end

然后做150@q

如果您录制相同的宏,^M只需键入Enter

如果您将宏指定为@q键入^M方式<c-v><enter>

顺便说一句,这不会赢得高尔夫,因为函数名submatch(0)太长了......:)

于 2013-03-15T21:27:23.593 回答
0

使用我的UnconditionalPaste 插件,将原始块拉入寄存器后,您可以[N]简单地粘贴自动递增的块[N]gPp按行粘贴,所有数字递增)。

该插件还允许对粘贴文本的方式进行其他几种操作。

于 2013-03-18T16:01:59.357 回答