如何在Eclipse的Vim中复制整行?


1624

如何复制在一整行的Vim以类似的方式来Ctrl+ D中的IntelliJ IDEA / ReSharper的或Ctrl+ Alt+ / Eclipse中


49
人们不再运行vimtutor吗?这可能是在学习如何使用Vim的前五分钟之内。
dash-tom-bang

131
您要重复这一行吗?Yes P租赁。:)
Stavr00

3
FWIW在过去的两个月中,我完成了大约12次vimtutor,但这个概念没有涉及。它告诉您如何执行“ dd”和“ v-导航-y”,后跟“ p”。它不会告诉您如何复制单行而不按此处要求将其删除。
danielson317

Answers:


2769

yyY复制行(助记:Ÿ ANK

ddd elete行(VIM拷贝你删除到剪贴板中,如“注册”,像操作)

然后

pp ASTE的复制或删除文本之后当前行

Pp ASTE的复制或删除文本之前当前行


129
一个很好的观点。出于某种原因,不过,我觉得打Ÿ两次是快,我比SHIFT-Y
马克Biek

25
@camflan我认为Y应该是“从光标到末尾的复制”
Dzung Nguyen 2012年

42
和2yy可用于复制2行(以及其他n行)
阿米尔·阿里·

5
@nXqd:是的,很大一部分用户映射Yy$。(与D和一致C(但与Vi不兼容(无人问津)。))这甚至在中提出:help Y
亚伦·托马

11
要复制两行,走yj或甚至会更快yk,尤其是因为您不会在一个字符上加倍。另外,这yk是个向后的版本,2yy您可以将行数倒入y9jy2k,等等。唯一的区别是您的行数必须n-1为总行数n,但是您的头可以知道无论如何。
zelk 2014年

406

普通模式:查看其他答案。

防爆方式:

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

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

如果将其与:g或结合使用,则它的功能可能非常强大:v

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

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


1
当按下:在视觉模式下,它被变换到'<,'>这样它预先选择的视觉选择跨越过线范围。因此,在可视模式下,:t0将在开始时复制行。
Benoit 2012年

1
记录一下:输入冒号(:)时进入命令行模式,您可以在其中输入Ex命令。vimdoc.sourceforge.net/htmldoc/cmdline.html Ex命令非常强大且简洁。yyp解决方案是“普通模式”命令。如果要复制/移动/删除远处的行或行范围,Ex命令可能会快很多。
Niels Bom 2012年

7
拒绝投票不是因为这样的问题(尽管这对我的情况不起作用,但我不知道我要复制的行号),但是因为它实际上不应成为此问题的最佳/可接受的答案常见搜索问题。
mjaggard

9
@mjaggard:无论分数高低,接受的答案始终位于顶部。是的,我添加了该答案作为补充,似乎很适合OP。
Benoit 2012年

7
:t.是该问题的确切答案。
Burak Erdem

293

YPYpyyp


Y通常,通常将其映射到y$(拖动(复制)直到行尾(从当前光标位置开始,而不是行首))。这条线在.vimrc:nnoremap Y y$
Aaron Thoma

1
不要忘记可怜的老人yyP
icc97 '17

253

复制并粘贴到vim中

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

yy

然后移至您要粘贴到的行

p

34
您用什么制作了gif?
佐尔坦

4
@Zoltán,您可以使用小尺寸的
LiceCap



43

如果您想要其他方式:

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

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

有很多变化。

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

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


谢谢,我将此用作绑定:map <Leader> d“ ayy” ap
frbl 2015年

39

yyp -用“ yippee”记住它!

多行,中间有数字:

y7yp


17
7yy等同于y7y,可能更容易记住该怎么做。
graywh

10
y7yp(或7yyp)很少有用;光标停留在复制的第一行上,以便p将复制的行粘贴到源的第一行和第二行之间。要复制一行代码,请使用7yyP
Nefrubyr 2014年

@Nefrubyr或:.,.+7 copy .+7:P
DarkWiiPlayer

23

yyp -粘贴后

yyP -粘贴之前


6
由于该行是重复的,因此内容的最终结果是相同的。
Acumenus

4
@ABB但是,这里有一个微小的区别-光标将落在哪一行上。
Mikk 2015年

12

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


11

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


这非常有用,但是为避免不得不按下许多键,我将其映射到了CTRL-L,这就是我的地图:inoremap ^ L ^ X ^ L
Jorge Gajon

11

另一种选择是:

nmap <C-d> mzyyp`z

使您可以保留光标位置。


10

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

yyY复制该行

dd删除该行

然后

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

P将复制或删除的文本粘贴之前光标


有关更多键绑定的信息,请访问以下网站:vi完整的键绑定列表


3

1陷阱:使用“ p”放置该行时,它将其放置光标所在的行之后,因此,如果要在要拖动的行之后添加该行,请不要将光标向下移动到一行在换行之前。


4
或使用大写
字母

3

默认值为yyp,但我已经使用此绑定大约一年了并且喜欢它:

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


3

我知道我晚会晚了,但是无论如何。我的.vimrc中有这个:

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

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

在普通模式下,copy . 将行复制到该行的下面

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


1
↑↑最佳答案在这里!

2

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

Windows用户的vi(Vim)


1

如果您想复制一行并将其立即粘贴到当前行的下方(就像Sublime Ctrl+ Shift+中一样)D,则可以将其添加到.vimrc文件中。

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

或者,对于插入模式:

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


但是,这会保留插入模式,而只是添加i到最后以重新输入它会中断undo,因此在插入模式下复制行的解决方案并不像看起来那样简单。
DarkWiiPlayer

这对我来说效果很好:imap <S-C-d> <Esc>Ypi 插入模式和 nmap <S-C-d> <Esc>Yp正常模式
jedi

0

我喜欢使用此映射:

:nnoremap yp Yp

因为它可以与本机YP命令一起使用。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.