How do I use vim registers?

后端 未结 17 2131
一向
一向 2020-11-27 08:58

I only know of one instance using registers is via CtrlR* whereby I paste text from a clipboard.

What are other uses of registers?

17条回答
  •  生来不讨喜
    2020-11-27 09:12

    One of my favorite parts about registers is using them as macros!

    Let's say you are dealing with a tab-delimited value file as such:

    ID  Df  %Dev    Lambda
    1   0   0.000000    0.313682
    2   1   0.023113    0.304332
    3   1   0.044869    0.295261
    4   1   0.065347    0.286460
    5   1   0.084623    0.277922
    6   1   0.102767    0.269638
    7   1   0.119845    0.261601
    

    Now you decide that you need to add a percentage sign at the end of the %Dev field (starting from 2nd line). We'll make a simple macro in the (arbitrarily selected) m register as follows:

    1. Press: qm: To start recording macro under m register.

    2. EE: Go to the end of the 3rd column.

    3. a: Insert mode to append to the end of this column.

    4. %: Type the percent sign we want to add.

    5. : Get back into command mode.

    6. j0: Go to beginning of next line.

    7. q: Stop recording macro

    We can now just type @m to run this macro on the current line. Furthermore, we can type @@ to repeat, or 100@m to do this 100 times! Life's looking pretty good.

    At this point you should be saying, "But what does this have to do with registers?"

    Excellent point. Let's investigate what is in the contents of the m register by typing "mp. We then get the following:

    EEa%j0
    

    At first this looks like you accidentally opened a binary file in notepad, but upon second glance, it's the exact sequence of characters in our macro!

    You are a curious person, so let's do something interesting and edit this line of text to insert a ! instead of boring old %.

    EEa!j0
    

    Then let's yank this into the n register by typing B"nyE. Then, just for kicks, let's run the n macro on a line of our data using @n....

    It added a !.

    Essentially, running a macro is like pressing the exact sequence of keys in that macro's register. If that isn't a cool register trick, I'll eat my hat.

提交回复
热议问题