Vim Tips Wiki
Advertisement

Previous TipNext Tip

Tip: #124 - Number a group of lines

Created: October 1, 2001 16:37 Complexity: basic Author: Brian Medley Version: 5.7 Karma: 6/3 Imported from: Tip#124

Below is a way to number a set of lines. Here is an example before and after snapshot:

 apple 
 bob 
 pear 
 tree 
 1 apple 
 2 bob 
 3 pear 
 4 tree 

Description:

This provides a command and a function. They both can be called with or without a range. In addition, they can be called with or without arguments. Without a range they operate on the current line.


There are two supported arguments. They are described below:

  • arg1 the number to start at. The default is one. This will

number your selected lines sequentially. The start can be a number, ., $, or, 'x (like getline).

  • arg2 Text to append after numbers. The default is a space.

Examples:

To provide your functionality:

:%Nlist 20 
:%call Nlist(20) 

To make a list start at 1:

:'<,'>Nlist 
:'<,'>call Nlist() 

To number the whole buffer (with it's actual line number):

:%Nlist 
:%call Nlist() 

To number a subset of lines with their line number (and put a '] ' in front of every number):

:'<,'>Nlist . ]\ 
:'<,'>call Nlist(".", "] ") 
command! -nargs=* -range Nlist <line1>,<line2>call Nlist(<f-args>) 
function! Nlist(...) range 

 if 2 == a:0 
 let start = a:1 
 let append = a:2 
 elseif 1 == a:0 
 let start = a:1 
 let append = " " 
 else 

 let start = 1 
 let append = " " 
 endif 


 " try to work like getline (i.e. allow the user to pass in . $ or 'x) 

 if 0 == (start + 0) 
 let start = line(start) 
 endif 

 exe a:firstline . "," . a:lastline . 's/^/\=line(".")-a:firstline+start.append/' 

endfunction 

Comments

There is now a plugin # nlist.vim in the "scripts" section that does this. The plugin also handles justifying the numbers. I probably should have waited and not made this tip...

Brian Medley , October 1, 2001 22:25

http://www.vim.org/scripts/script.php?script_id=101


Advertisement