1820

如何以类似于IntelliJ IDEA/Resharper 中的 + 或Eclipse的+ + /的方式在Vim中复制整行?CtrlDCtrlAlt

4

21 回答 21

3059

yyY复制行(助记符:y ank
删除
dd(Vim 将您删除的内容复制到类似剪贴板的“寄存器”中,如剪切操作)

然后

p复制或删除的文本粘贴当前行 之后

P复制或删除的文本粘贴当前行之前

于 2008-09-16T15:06:46.393 回答
455

正常模式:查看其他答案。

前任方式:

  • :t.将复制该行,
  • :t 7将在第 7 行之后复制它,
  • :,+t0将复制文件开头的当前行和下一行(,+是范围的同义词.,.+1),
  • :1,t$将从开头复制行直到光标位置到结尾(1,是 range 的同义词1,.)。

如果您需要移动而不是复制,请使用:m代替:t.

如果将它与:gor结合使用,这将非常强大:v

  • :v/foo/m$会将所有与模式“foo”不匹配的行移至文件末尾。
  • :+,$g/^\s*class\s\+\i\+/t.class xxx将在光标之后复制表单的所有后续行。

参考::help range, :help :t, :help :g,:help :m:help :v

于 2012-04-17T15:17:21.180 回答
316

YPYpyyp

于 2008-09-16T15:07:10.950 回答
279

在vim中复制粘贴

没有比这更简单的了!从正常模式:

yy

然后移动到要粘贴的行,然后

p
于 2014-02-07T22:20:41.630 回答
59

yy

将拉当前行而不删除它

dd

将删除当前行

p

将由put前面的任何一种方法抓取一条线

于 2008-09-16T15:04:11.033 回答
53

做这个:

首先,yy复制当前行,然后p粘贴。

于 2008-09-16T15:04:10.673 回答
49

如果你想要另一种方式:

"ayy:这会将行存储在缓冲区中a

"ap:这会将缓冲区的内容放在a光标处。

这有很多变化。

"a5yy:这会将 5 行存储在缓冲区中a

请参阅“ Vim 帮助文件以获得更多乐趣。

于 2008-09-16T15:37:24.933 回答
44

yyp- 用“yippee”记住它!

多行,中间有一个数字:

y7yp

于 2008-09-16T15:16:29.647 回答
27

yyp- 粘贴后

yyP- 粘贴之前

于 2013-10-12T18:23:05.530 回答
16

我喜欢: Shift+ v(立即选择整行并让您根据需要选择其他行),y,p

于 2009-07-14T04:45:12.917 回答
12

另一种选择是:

nmap <C-d> mzyyp`z

为您提供保留光标位置的优势。

于 2009-07-14T04:37:04.837 回答
11

您也可以尝试 <Cx><Cl> ,它将从插入模式重复最后一行,并为您带来一个包含所有行的完成窗口。它几乎像 <Cp>

于 2008-09-18T20:32:52.630 回答
10

对于不了解 vi 的人来说,上面的一些答案可能会用“粘贴...在当前行之后/之前”这样的短语来误导他。
它实际上是“粘贴......在光标之后/之前”。

yyY复制该行

dd删除该行

然后

p将复制或删除的文本粘贴到光标或 将复制或删除的文本粘贴到光标

P


更多按键绑定,可以访问这个网站:vi Complete Key Binding List

于 2016-05-12T14:54:42.353 回答
7

我知道我迟到了,但无论如何;我的 .vimrc 中有这个:

nnoremap <C-d> :copy .<CR>
vnoremap <C-d> :copy '><CR>

:copy命令只是将选定的行或范围(总是整行)复制到作为其参数给出的行号下方。

在正常模式下,它的作用是copy . 将这一行复制到这一行的正下方

在可视模式下,它会'<,'> copy '> 从选择开始到选择结束复制到选择结束下方的行

于 2018-04-13T07:26:23.813 回答
5

默认是yyp,但我已经使用这个重新绑定一年左右并且喜欢它:

" set Y to duplicate lines, works in visual mode as well. nnoremap Y yyp vnoremap Y y`>pgv

于 2015-04-20T04:33:53.933 回答
3

1 陷阱:当您使用“p”放置该行时,它会将其放在光标所在的行之后,因此如果您想在您正在拉动的行之后添加该行,请不要将光标向下移动一行在放新线之前。

于 2008-09-16T15:06:45.053 回答
3

对于那些开始学习 vi 的人,这里是 vi 的一个很好的介绍,通过并排列出 vi 命令到典型的 Windows GUI 编辑器光标移动和快捷键。它列出了所有基本命令,包括yy(复制行)和p(粘贴后)或P(粘贴前)。

适用于 Windows 用户的 vi (Vim)

于 2016-02-10T13:23:48.640 回答
2

如果您想复制一行并将其粘贴到当前喜欢的下方,就像在 Sublime Ctrl++中Shift一样D,那么您可以将其添加到您的.vimrc文件中。

nmap <S-C-d> <Esc>Yp

或者,对于插入模式:

imap <S-C-d> <Esc>Ypa

于 2018-02-11T17:20:36.883 回答
1

我更喜欢定义自定义键盘映射Ctrl+ Din以在正常模式和插入.vimrc模式下复制当前行:

" duplicate line in normal mode:
nnoremap <C-D> Yp
" duplicate line in insert mode:
inoremap <C-D> <Esc> Ypi
于 2021-08-02T12:02:14.723 回答
0

我喜欢使用这个映射:

:nnoremap yp Yp

因为它使它与本机YP命令一起使用是一致的。

于 2018-04-11T16:34:29.520 回答
0

我使用这个映射,类似于 vscode。我希望它有用!!!!

nnoremap <A-d> :t. <CR>==
inoremap <A-d> <Esc>:t. <CR>==gi
vnoremap <A-d> :t$ <CR>gv=gv
于 2021-05-02T05:16:34.447 回答