Moving lines up or down in a file
From Vim Tips Wiki
Tip 646 Previous Next created 2004 · complexity basic · author Frank Butler · version 6.0
The following mappings in your vimrc provide a quick way to move lines of text up or down. The mappings work in normal, insert and visual modes, allowing you to move the current line or a selected block of lines.
nnoremap <M-j> mz:m+<CR>`z== nnoremap <M-k> mz:m-2<CR>`z== inoremap <M-j> <Esc>:m+<CR>==gi inoremap <M-k> <Esc>:m-2<CR>==gi vnoremap <M-j> :m'>+<CR>gv=`<my`>mzgv`yo`z vnoremap <M-k> :m'<-2<CR>gv=`>my`<mzgv`yo`z
Press Alt-j to move the current line down, or press Alt-k to move the current line up. The == re-indents the line to suit its new position.
Explanation
The command :m 5 moves the current line to below line 5. If the number starts with + or -, it is relative to the current line, so :m +5 moves the current line down by 5 lines (+5 is interpreted as .+5 where . means the current line). The space after :m is not required, and the +1 can be written as + (the 1 is assumed).
See also
Comments
TO DO
- A quick test shows that this is very nice, and if polished, it could be a featured tip.
- Why does it use a mark? I only tried the normal-mode mapping, but it seemed to work fine with the mz and `z removed.
- Need to improve my above explanation.