How do I duplicate a whole line in Vim in a similar way to Ctrl+D in IntelliJ IDEA/ Resharper or Ctrl+Alt+↑/↓ in Eclipse?
23 Answers
First:
yy or Y to copy the line (mnemonic: yank)
or
dd to delete the line (Vim copies what you deleted into a clipboard-like "register", like a cut operation)
then:
p to paste the copied or deleted text after the current line
or
Shift + P to paste the copied or deleted text before the current line
12 Comments
Y to y$. (Consistent with D and C; (but not Vi compatible (no one cares.))) That is even proposed in :help Y.yj or yk, especially since you don't double up on one character. Plus, yk is a backwards version that 2yy can't do, and you can put the number of lines to reach backwards in y9j or y2k, etc.. Only difference is that your count has to be n-1 for a total of n lines, but your head can learn that anyway.Normal mode: see other answers.
The Ex way:
:t.will duplicate the line,:t 7will copy it after line 7,:,+t0will copy current and next line at the beginning of the file (,+is a synonym for the range.,.+1),:1,t$will copy lines from beginning till cursor position to the end (1,is a synonym for the range1,.).
If you need to move instead of copying, use :m instead of :t.
This can be really powerful if you combine it with :g or :v:
:v/foo/m$will move all lines not matching the pattern “foo” to the end of the file.:+,$g/^\s*class\s\+\i\+/t.will copy all subsequent lines of the formclass xxxright after the cursor.
Reference: :help range, :help :t, :help :g, :help :m and :help :v
10 Comments
: in visual mode, it is transformed to '<,'> so it pre-selects the line range the visual selection spanned over. So, in visual mode, :t0 will copy the lines at the beginning.:t. is the exact answer to the question.YP or Yp or yyp.
2 Comments
Y is usually remapped to y$ (yank (copy) until end of line (from current cursor position, not beginning of line)) though. With this line in .vimrc: :nnoremap Y y$yyP
Doesn't get any simpler than this! From normal mode:
yy then move to the line you want to paste at and
p 4 Comments
yy
will yank the current line without deleting it
dd
will delete the current line
p
will put a line grabbed by either of the previous methods
1 Comment
If you want another way:
"ayy: This will store the line in buffer a.
"ap: This will put the contents of buffer a at the cursor.
There are many variations on this.
"a5yy: This will store the 5 lines in buffer a.
See "Vim help files for more fun.
1 Comment
yyp - remember it with "yippee!"
Multiple lines with a number in between:
y7yp
3 Comments
:.,.+7 copy .+7 :PYou can also try <C-x><C-l> which will repeat the last line from insert mode and brings you a completion window with all of the lines. It works almost like <C-p>
1 Comment
I know I'm late to the party, but whatever; I have this in my .vimrc:
nnoremap <C-d> :copy .<CR> vnoremap <C-d> :copy '><CR> the :copy command just copies the selected line or the range (always whole lines) to below the line number given as its argument.
In normal mode what this does is copy . copy this line to just below this line.
And in visual mode it turns into '<,'> copy '> copy from start of selection to end of selection to the line below end of selection.
For someone who doesn't know vi, some answers from above might mislead him with phrases like "paste ... after/before current line".
It's actually "paste ... after/before cursor".
yy or Y to copy the line
or
dd to delete the line
then
p to paste the copied or deleted text after the cursor
or
P to paste the copied or deleted text before the cursor
For more key bindings, you can visit this site: vi Complete Key Binding List
Comments
I prefer to define a custom keymap Ctrl+D in .vimrc to duplicate the current line both in normal mode and insert mode:
" duplicate line in normal mode: nnoremap <C-D> Yp " duplicate line in insert mode: inoremap <C-D> <Esc> Ypi 1 Comment
#copy current line
usage:
press yy (to copy current line)
press p (to paste copied line)
#help&more:
https://www.youtube.com/watch?v=HMpB28l1sLc
Comments
1 gotcha: when you use "p" to put the line, it puts it after the line your cursor is on, so if you want to add the line after the line you're yanking, don't move the cursor down a line before putting the new line.
1 Comment
For those starting to learn vi, here is a good introduction to vi by listing side by side vi commands to typical Windows GUI Editor cursor movement and shortcut keys. It lists all the basic commands including yy (copy line) and p (paste after) or P(paste before).
Comments
If you would like to duplicate a line and paste it right away below the current like, just like in Sublime Ctrl+Shift+D, then you can add this to your .vimrc file.
nmap <S-C-d> <Esc>Yp
Or, for Insert mode:
imap <S-C-d> <Esc>Ypa
2 Comments
i to the end to re-enter it breaks undo, so the solution to duplicating lines in insert mode is not as trivial as it seems.imap <S-C-d> <Esc>Ypi insert mode and nmap <S-C-d> <Esc>Yp in normal modeIf you want to duplicate a line just below, the answers above are correct.
Another common case would be if you are somewhere in your text, and you want to duplicate a line located far away in your buffer, out of sight, and you don't want to go there, for some reason.
In this case:
- begin typing a few letters of the beginning of the line that you want to duplicate;
- hit
Ctrl-X Ctrl-L: this will bring a pop-up list similar to the autocompletion one (Ctrl-P and Ctrl-N); - navigate up and down through this list with
Ctrl-LandCtrl-Nuntil you get the line you wish; - hit
Enter, and voilà.
I find this particularly handy when you write code.
YesPlease. :)