How to insert spaces up to column X to line up things in columns?

前端 未结 7 2071
鱼传尺愫
鱼传尺愫 2020-12-04 09:45

I have my source code for copy operators written as follows.

foo = rhs.foo;
foobar = rhs.foobar;
bar = rhs.bar;
toto = rhs.toto;

I\'d like

7条回答
  •  南笙
    南笙 (楼主)
    2020-12-04 10:07

    The other answers here are great, especially @nelstrom's comment for Tabular.vim and his excellent screencast.

    But if I were feeling too lazy to install any Vim plugins, yet somehow willing to use Vim macros, I'd use macros.

    The algorithm:

    For each line,
        Add tons of spaces before the symbol =
        Go to the column you want to align to
        Delete all text up to =, thereby shifting the = into the spot you want.
    

    For your example,

    foo = rhs.foo;
    foobar = rhs.foobar;
    bar = rhs.bar;
    toto = rhs.toto;
    

    Position the cursor anywhere on the first line and record the macro for that line by typing, in normal mode:

    qa0f=100i 8|dwjq
    

    Which translates to:

    1. qa -- Record a macro in hotkey a
    2. 0 -- Go to the beginning of the line
    3. f= -- Go to the first equals sign
    4. 100i -- (There's a single space after the i, and the means press escape, don't type "".) Insert 100 spaces
    5. 8| -- Go to the 8th column (sorry, you'll have to manually figure out which column to align to)
    6. dw -- Delete until the next non-space character
    7. j -- Go to the next line
    8. q -- Stop recording.

    Then run the macro stored at hotkey a, 3 times (for the 3 remaining lines), by putting the cursor on the second line and pressing:

    3@a
    

提交回复
热议问题