created October 31, 2001 · complexity intermediate · author Charles E. Campbell, Jr. · version 5.7
You can use the "Visual Incrementing" script from http://mysite.verizon.net/astronaut/vim/index.html#VimFuncs to convert a block of numbers selected via ctrl-v (visual block) into a column of increasing integers. Select the column, press :I<CR>, and the first line's number will be used as a starting value. The number in each subsequent line will be incremented by one.
If the ctrl-v block is "ragged right", which can happen when "$" is used to select the right hand side, the block will have spaces appended as needed to straighten it out. If the strlen of the count exceeds the visual-block allotment of spaces, then additional spaces will be inserted.
Example: Put cursor on topmost zero, select column with ctrl-v, then :I
vector[0] = 1; vector[0] = 1; vector[0] = 1; vector[1] = 1; vector[0] = 1; --> vector[2] = 1; vector[0] = 1; vector[3] = 1; vector[0] = 1; vector[4] = 1;
This script works with both Vim 5.7 (:so visincr.vim) or Vim 6.0 (source it as for Vim 5.7 or drop it into the .vim/plugin directory).
Comments
" another way of generating incremented numbers "============================================================================= " File: increment.vim " Author: Stanislav Sitar " Put increment.vim into a plugin directory. " Use in replacement strings " :let I=0 " :%s/my_token_word_to_be_replaced_by_the_auto_incremented_numbers/\=INC(1)/ " or " :let I=95 " :%s/@/\=INC(5)/ " to replace each occurrence of character @ with numbers starting with 100 and " growing by 5 (100, 105, 110, ...) " " Instalation: save this text as increment.vim in your plugins directory "========================================================================= let g:I=0 function INC(increment) let g:I = g:I + a:increment return g:I endfunction
Visincr.vim has been improved -- it now uses virtual column calculations which avoids problems with leading tabs -- you may even mix leading tabs and spaces, incrementing only the visually selected column.
Other methods/scripts for incrementing scripts are available as:
- Srinath Avadhanula script#156
- Stanislav Sitar script#145
If you're interested in using substitute based approaches, you might wish to consider Stefan Roemer's <vis.vim>, which allows one to apply a substitute to just a visual-block. You can get a copy of his script at http://mysite.verizon.net/astronaut/vim/index.html#VimFuncs -- see "Visual Block Commands".
<visincr.vim> supports:
:I<CR> will use the first line's number as a starting point, incrementing by 1 :I #<CR> like :I, but will increment by given number; negative numbers work fine :II<CR> will pad on left as needed, otherwise like :I :II #<CR> like :II, but will increment by given number
More features for <visincr.vim>! There's now an additional script, <calutil.vim>, which adds some calendrical dates <-> Julian day conversion functions. With those, <visincr.vim> now has new commands:
- IMDY [incr] : makes a column of month/day/year dates
- IYMD [incr] : makes a column of year/month/day dates
- IDMY [incr] : makes a column of day/month/year dates
- ID [incr] : makes a column of daynames
Of course, the optional incr (default value is 1) can be positive or negative. Both scripts are available at http://mysite.verizon.net/astronaut/vim/index.html#VimFuncs.