Tumblelog by Soup.io
Newer posts are loading.
You are at the newest post.
Click here to check if anything new just came in.

June 27 2008

davitenio

vim tip: expression register + autoincrement + recording ....

I had a line like this:
    PARTITION p_op1 VALUES LESS THAN 150,
and I wanted to generate this:
    PARTITION p_op1 VALUES LESS THAN 150,
    PARTITION p_op2 VALUES LESS THAN 300,
    PARTITION p_op3 VALUES LESS THAN 450,
    PARTITION p_op4 VALUES LESS THAN 600,
    PARTITION p_op5 VALUES LESS THAN 750,
    PARTITION p_op6 VALUES LESS THAN 900,
    PARTITION p_op7 VALUES LESS THAN 1050,
    PARTITION p_op8 VALUES LESS THAN 1200,
    PARTITION p_op9 VALUES LESS THAN 1350,
    PARTITION p_op10 VALUES LESS THAN 1500,
    PARTITION p_op11 VALUES LESS THAN 1650,
    PARTITION p_op12 VALUES LESS THAN 1800,
    PARTITION p_op13 VALUES LESS THAN 1950,
    PARTITION p_op14 VALUES LESS THAN 2100,
    PARTITION p_op15 VALUES LESS THAN 2250,
    PARTITION p_op16 VALUES LESS THAN 2400,
    PARTITION p_op17 VALUES LESS THAN 2550,
    PARTITION p_op18 VALUES LESS THAN 2700,
    PARTITION p_op19 VALUES LESS THAN 2850,
    PARTITION p_op20 VALUES LESS THAN 3000,

How to do it the vim way:
Copy the line we originally had and multiply the value by 1, so that we have this:
    PARTITION p_op1 VALUES LESS THAN 150,
    PARTITION p_op1 VALUES LESS THAN 150 * 1,
place cursor at the beginning of the line (bold marks the cursor position): _
    PARTITION p_op1 VALUES LESS THAN 150,
    PARTITION p_op1 VALUES LESS THAN 150 * 1,
start recording into register a: qa
increment partition number: ctrl+a
Now we have:
    PARTITION p_op1 VALUES LESS THAN 150,
    PARTITION p_op2 VALUES LESS THAN 150 * 1,
Move to the comma: f,
    PARTITION p_op1 VALUES LESS THAN 150,
    PARTITION p_op2 VALUES LESS THAN 150 * 1,
Move one position left: h
    PARTITION p_op1 VALUES LESS THAN 150,
    PARTITION p_op2 VALUES LESS THAN 150 * 1,
Increment the number 1 by 1: ctrl+a
    PARTITION p_op1 VALUES LESS THAN 150,
    PARTITION p_op2 VALUES LESS THAN 150 * 2,
Copy & paste line: yyp
    PARTITION p_op1 VALUES LESS THAN 150,
    PARTITION p_op2 VALUES LESS THAN 150 * 2,
    PARTITION p_op2 VALUES LESS THAN 150 * 2,
Move back to the end of the previous line: k$
    PARTITION p_op1 VALUES LESS THAN 150,
    PARTITION p_op2 VALUES LESS THAN 150 * 2,
    PARTITION p_op2 VALUES LESS THAN 150 * 2,
Delete expression into register n: "nd3b
    PARTITION p_op1 VALUES LESS THAN 150,
    PARTITION p_op2 VALUES LESS THAN ,
    PARTITION p_op2 VALUES LESS THAN 150 * 2,
Enter insert mode: i
Enter expression mode: ctrl+r =
Paste deleted expression: ctrl+r n
Insert expression: <Enter>
    PARTITION p_op1 VALUES LESS THAN 150,
    PARTITION p_op2 VALUES LESS THAN 300,
    PARTITION p_op2 VALUES LESS THAN 150 * 2,
Exit insert mode and move to the beginning of the next line: <esc>2_
    PARTITION p_op1 VALUES LESS THAN 150,
    PARTITION p_op2 VALUES LESS THAN 300,
    PARTITION p_op2 VALUES LESS THAN 150 * 2,
Stop recording: q
Repeat what has been recorded as many times as you want, for instance, 10 times: 10@a
    PARTITION p_op1 VALUES LESS THAN 150,
    PARTITION p_op2 VALUES LESS THAN 300,
    PARTITION p_op3 VALUES LESS THAN 450,
    PARTITION p_op4 VALUES LESS THAN 600,
    PARTITION p_op5 VALUES LESS THAN 750,
    PARTITION p_op6 VALUES LESS THAN 900,
    PARTITION p_op7 VALUES LESS THAN 1050,
    PARTITION p_op8 VALUES LESS THAN 1200,
    PARTITION p_op9 VALUES LESS THAN 1350,
    PARTITION p_op10 VALUES LESS THAN 1500,
    PARTITION p_op11 VALUES LESS THAN 1650,
    PARTITION p_op12 VALUES LESS THAN 1800,
    PARTITION p_op12 VALUES LESS THAN 150 * 12,

Complicated? Maybe, but a lot more fun and much faster than doing it manually ;-)
Reposted bymetamurks metamurks