Vim Tips Wiki
Tip 979 Printable Monobook Previous Next

created 2005 · complexity basic · version 7.0

This tip presents suggestions for useful mappings. To qualify, each mapping should be short and should be useful for a common task. Other mappings belong in another tip.

This is a collection of unrelated mappings. You probably can't use all of them "as-is" at the same time. Assign your own left-hand-side as you see fit.

Visual mode blockwise indent[]

This keeps the current visual block selection active after changing indent with '<' or '>'. Usually the visual block selection is lost after you shift it, which is incredibly annoying.

vmap > >gv
vmap < <gv

Record into register 'q', playback with 'Q'[]

Set this map:

nnoremap Q @q

For quick recordings just type qq to start recording, then q to stop. You don't have to worry about the name this way (you just named the recording 'q'). Now, to play back the recording you just type Q. This will redefine the standard meaning of 'Q', but all that does is enter "Ex" mode which I can live without.


To copy text to the end-of-line, you can press y$ or you can use the following and press Y instead. This mapping sets up Y to be consistent with the C and D operators, which act from the cursor to the end of the line. The default behavior of Y is to yank the whole line.

nnoremap Y y$

To copy an entire line, and paste it before the current line:

nnoremap _ ggY``P

Use a count to specify the line number (default is line 1). For example, 12_ would copy line 12 to before the current line.


In normal mode, you can press D to delete all characters from the cursor to end-of-line. The following mapping allows Ctrl-Delete to do the same, in insert mode: :help i_CTRL-\_CTRL-O

inoremap <C-Del> <C-\><C-O>D


It's easier to press Space than / for searching:

nmap <Space> /
nmap <C-Space> ?

Highlight text on the screen matching that under the cursor: Press Ctrl-k to start; each subsequent Ctrl-l matches one more character. Uses marks "x" and "y", and register "z".

map <C-k> mx
map <C-l> lmy"zy`x/<C-r>z<CR>`y

Search for word under cursor with * or # in new window:

nmap <C-W>* <C-W>s*
nmap <C-W># <C-W>s#


" map <F3> and <S-F3> to jump between locations in a quickfix list, or
" differences if in window in diff mode
nnoremap <expr> <silent> <F3>   (&diff ? "]c" : ":cnext\<CR>")
nnoremap <expr> <silent> <S-F3> (&diff ? "[c" : ":cprev\<CR>")


" remap j and k to scroll by visual lines
nnoremap j gj
nnoremap k gk

Another option is to leave 'j' and 'k' at their default and instead map the cursor keys for use "precision" scrolling by visual lines. Plus this works in insert and visual select modes.

imap <up> <C-O>gk
imap <down> <C-O>gj
nmap <up> gk
nmap <down> gj
vmap <up> gk
vmap <down> gj


You can use a more easily accessed key to enter command-line mode to speed your editing, for example:

nnoremap <Space> :

For those with non-QWERTY keyboards, for example a Brazillian ABNT2 keyboard, you can easily avoid built-in Vim commands in your mapping:

nnoremap ç :