Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
648 views
in Technique[技术] by (71.8m points)

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

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 to line things up as follows (more human readable, isn't it?).

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

Is there a VIM magic insert-up-to-column-N, or something like that that would allow me to line things up using a couple of keystrokes per line?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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 <Esc>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 <Esc> -- (There's a single space after the i, and the <Esc> means press escape, don't type "<Esc>".) 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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...