Fandom

Vim Tips Wiki

Insert line numbers

Redirected from Create numbered list

1,624pages on
this wiki
Add New Page
Talk0 Share

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.

Tip 28 Printable Monobook Previous Next

created 2001 · complexity intermediate · version 7.0


The :set number command displays line numbers. This tip, however, shows how to insert line numbers into a file, or into just a section. Also, the option to print with line numbers is given (Vim can print lines with numbers, and does not need the numbers in the file).

Using VimEdit

The :s command can be used to insert line numbers before each line:

:%s/^/\=printf('%-4d', line('.'))

The pattern ^ matches the start of every line, and the replacement \= is the result of evaluating the following expression. That expression uses printf() to format the number of the current line: %-4d is a left-aligned decimal number, padded if necessary by adding spaces to a 4-column width (%4d is right-aligned, and %04d inserts leading zeroes).

To number a section, specify which lines should be numbered with a range. For example, press V to select the first line, then press j to extend the selection down until all required lines are selected. Then type the following command (do not type '<,'> as that is inserted by Vim):

:'<,'>s/^/\=printf("%d.\t", line(".") - line("'<") + 1)

The above example has a format string of "%d.\t" which inserts a left-aligned number, followed by a period and a tab character. Each line in the selected range is numbered. Use the following if you want to only number non-blank lines (it finds the start of a line followed by a character that is not whitespace):

:'<,'>s/^\S/\=printf("%d.\t", line(".") - line("'<") + 1)

In the above, blank lines are counted, but do not have a number inserted (the inserted numbers would be 1, 2, 3, 5, 6 if line 4 was blank).

The following alternative does not number blank lines and does not skip line numbers:

:'<,'>g/^\S/s/^/\=printf("%d.\t", Inc())

The above requires the Inc() function from here. In addition, you need to set the value for the first line number before selecting any lines. To do that enter:

:let i = 1

Using nlEdit

On Unix based systems, the number lines utility can be used to insert numbers by filtering the whole buffer:

:%!nl -ba

The nl utility has many options to control which lines are numbered and how the numbers are formatted.

To number a section, specify which lines should be numbered with a range. For example, press V to select the first line, then press j to extend the selection down until all required lines are selected. Then type :!nl -ba. You will see (the '<,'> is inserted by Vim):

:'<,'>!nl -ba

Printing with line numbersEdit

There is no need to insert line numbers if all that is wanted is to have lines numbered in a printout. Instead, use the following command to tell Vim to insert line numbers on printing (change y to n to turn this off):

:set printoptions=number:y

CommentsEdit

Insert line numbers with a Perl filter is another method.

Also on Fandom

Random Wiki