如何在Vim中复制整行?

1977

我该如何在Vim中像在IntelliJ IDEA/ Resharper中按下Ctrl+D或在Eclipse中按下Ctrl+Alt+/的方式复制整行?


216
你想复制这一行吗?Yes(是的) Please(请)。 :) - Stavr00
11
近两个月来,我已经完成了约十二次vimtutor的学习,但其中涉及的概念并未包括本问题所要求的单行复制且不删除。该教程只教授如何使用“dd”、“v-导航-y”和“p”命令进行操作。 - danielson317
22个回答

14

另一个选择是使用:

nmap <C-d> mzyyp`z

让你保留光标位置的优势。


12

你也可以尝试使用 <C-x><C-l>,它会从插入模式重复上一行,并为您带来一个包含所有行的完成窗口。它几乎像 <C-p> 一样工作。


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

10
对于不了解vi编辑器的人,以上答案中的一些短语,例如 "在当前行之后/之前粘贴..." 可能会误导他。
实际上应该是 "在光标之后/之前粘贴..."。

yyY 复制整行
或者
dd 删除整行

然后

p 粘贴已复制或删除的文本 光标 之后

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


更多键绑定可以访问此网站:vi完整键绑定列表


9

我知道我来晚了,但是没关系;我在我的 .vimrc 文件中有这个:

nnoremap <C-d> :copy .<CR>
vnoremap <C-d> :copy '><CR>
:copy 命令只复制所选的行或范围(始终是整行),并将其复制到给定参数下面的行。
在普通模式下,它执行的是 copy .,即将本行复制到本行下面。
而在可视化模式下,它变成了 '<,'> copy '>,即从选择的起点到终点复制,并将其粘贴到终点下面一行。

3
这里的最佳答案↑↑ - user5287133

6

我喜欢在.vimrc文件中定义一个自定义的按键映射Ctrl+D,以便在普通模式和插入模式下都可以复制当前行:

" duplicate line in normal mode:
nnoremap <C-D> Yp
" duplicate line in insert mode:
inoremap <C-D> <Esc> Ypi

这正是我在寻找的! - Arthur Melo

5

默认值为yyp,但我已经使用了这个重新绑定约一年,非常喜欢:

" 将Y设置为复制行,在可视模式下也适用。 nnoremap Y yyp vnoremap Y y`>pgv


3

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

vi(Vim)适用于Windows用户


3

注意事项:当使用“p”命令添加一行时,它会将新行放在光标所在行的后面。因此,如果您想在复制的行下方添加一行,请不要先向下移动光标再执行“p”命令。


5
P请将文本翻译成中文。仅返回翻译后的文本: - Ghoti

3
如果你想复制一行并立即粘贴到当前行下面,就像在 Sublime 中使用 Ctrl+Shift+D 一样,那么你可以将以下内容添加到你的 .vimrc 文件中。 或者,对于插入模式:

这会离开插入模式,只需在末尾添加“i”以重新进入它就会破坏“撤消”,因此在插入模式下复制行的解决方案并不像看起来那么简单。 - DarkWiiPlayer
这对我来说完美地运作: 在插入模式下使用 imap <S-C-d> <Esc>Ypi, 在正常模式下使用 nmap <S-C-d> <Esc>Yp - jedi

1

我喜欢使用这个映射:

:nnoremap yp Yp

因为它可以与本地YP命令一起使用,使得使用更加一致。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接