Vim Tips Wiki

Quick generic option toggling

Redirected from VimTip920

1,623pages on
this wiki
Add New Page
Add New Page Talk0
Tip 920 Printable Monobook Previous Next

created April 28, 2005 · complexity intermediate · author Piet Delport · version 5.7

A fairly well-known mapping to toggle boolean options is:

map <F2> :set wrap!<CR>

Nicer, more elaborate versions of this idea exist, such as:

nnoremap <F8> :set wrap! wrap?<CR>
imap <F8> <C-O><F8>

which displays the current value of the option after toggling it, and works both in normal and insert mode.

However, that definition quickly clutters up your vimrc, and is a pain to edit due to the redundant occurrences of the toggle key and option.

Wrapping the definition in a function solves the problem, and makes the toggle definition a one-line operation again:

" Map key to toggle opt
function MapToggle(key, opt)
  let cmd = ':set '.a:opt.'! \| set '.a:opt."?\<CR>"
  exec 'nnoremap '.a:key.' '.cmd
  exec 'inoremap '.a:key." \<C-O>".cmd
command -nargs=+ MapToggle call MapToggle(<f-args>)

" Display-altering option toggles
MapToggle <F1> hlsearch
MapToggle <F2> wrap
MapToggle <F3> list

" Behavior-altering option toggles
MapToggle <F10> scrollbind
MapToggle <F11> ignorecase
MapToggle <F12> paste
set pastetoggle=<F12>

See alsoEdit


Also on Fandom

Random Wiki