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?
问题:
回答1:
yy or Y to copy the line
or
dd to delete (cutting) the line
then
p to paste the copied or deleted text after the current line
or
P to paste the copied or deleted text before the current line
回答2:
Normal mode: see other answers.
The Ex way:
:t.
will duplicate the line,:t 7
will copy it after line 7,:,+t0
will 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 xxx
right after the cursor.
Reference: :help range
, :help :t
, :help :g
, :help :m
and :help :v
回答3:
YP
or Yp
or yyp
.
回答4:
Doesn't get any simpler than this! From normal mode:
yy
then move to the line you want to paste at and
p
回答5:
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
回答6:
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 http://www.vim.org/htmldoc/help.html for more fun
回答7:
yyp - remember it with "yippee!"
Multiple lines with a number in between:
y7yp
回答8:
Do this:
First, yy to copy the current line, and then p to paste.
回答9:
yyp - paste after
yyP - paste before
回答10:
You 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>
回答11:
Another option would be to go with:
nmap <C-d> mzyyp`z
gives you the advantage of preserving the cursor position.
回答12:
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
回答13:
I like: Shift+v (to select the whole line immediately and let you select other lines if you want), y, p
回答14:
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.
回答15:
Default is yyp, but I've been using this rebinding for a year or so and love it:
" set Y to duplicate lines, works in visual mode as well.
nnoremap Y yyp
vnoremap Y y`>pgv
回答16:
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).
vi (Vim) for Windows Users
回答17:
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.
回答18:
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.
imap <S-C-d> <Esc>Yp
回答19:
I like to use this mapping:
:nnoremap yp Yp
because it makes it consistent to use alongside the native YP
command.