Vim Tips Wiki
Advertisement
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Tip 750 Printable Monobook Previous Next

created 2004 · complexity intermediate · author Chris X Edwards · version 6.0


This tip shows how to underline text document headings with, for example, a dashed line.

Using a mapping

Starting with a line of text like:

A Very Important Tip!

the mapping below inserts a row of dashes like this:

A Very Important Tip!
---------------------

This is useful to highlight headings. Add the following to your vimrc:

" Underline the current line with dashes in normal mode
nnoremap <F5> yyp<c-v>$r-

" Underline the current line with dashes in insert mode
inoremap <F5> <Esc>yyp<c-v>$r-A

Of course you can use other characters instead of -, for example, = or _.

In case you want to get a line above and below the heading, do this in normal mode:

<F5>yykP

Using substitute

You can use the global and substitute commands (:help :g, :help :s) to underline all headings matching a pattern. For example, the following adds a row of dashes under each line that starts with "Chapter":

:g/^Chapter/t.|s/./-/g

It works by finding each matching line, then copying it (:help :t), then substituting each character (.) in the line.

Using a function

The following code (for your vimrc) defines a user command to underline the current line. Examples:

:Underline gives underlining like -------------- (default).
:Underline = gives underlining like ==============.
:Underline -= gives underlining like -=-=-=-=-=-=-=.
:Underline ~+- gives underlining like ~+-~+-~+-~+-~+-~+-.
function! s:Underline(chars)
  let chars = empty(a:chars) ? '-' : a:chars
  let nr_columns = virtcol('$') - 1
  let uline = repeat(chars, (nr_columns / len(chars)) + 1)
  put =strpart(uline, 0, nr_columns)
endfunction
command! -nargs=? Underline call s:Underline(<q-args>)

Related plugins

As an alternative, you could use a plugin:

  • extline : Plugin for extending lines (e.g., underlined titles)

See also

Comments

yypVr- also works well. Great tip for Markdown and WikiTex users. Linktohack 15:37, February 3, 2012 (UTC)

Thanks. There is a subtle feature about the method in the tip. If you have the default 'virtualedit' setting (""), and if there is a tab in the line, using Vr- replaces each tab with a single dash, while the method in the tip uses the correct number of dashes depending on the width of the tab. JohnBeckett 06:50, February 4, 2012 (UTC)
Advertisement