如何以类似于 IntelliJ IDEA/Resharper 中的 Ctrl+D 或 Eclipse 中的 Ctrl+Alt+↑/↓ 的方式在 Vim 中复制整行?
Y
是P
租约。 :)
yy 或 Y 复制该行(助记符:yank)或 dd 删除该行(Vim 将您删除的内容复制到类似剪贴板的“寄存器”中,如剪切操作)
然后
将复制或删除的文本粘贴到当前行之后或 P 将复制或删除的文本粘贴到当前行之前
正常模式:查看其他答案。
Ex 方式:
:t。将复制该行,
:t 7 将在第 7 行之后复制它,
:,+t0 将复制文件开头的当前行和下一行(,+ 是范围 .,.+1 的同义词),
:1,t$ 将从开头复制行到光标位置到结尾(1,是范围 1,. 的同义词)。
如果您需要移动而不是复制,请使用 :m
而不是 :t
。
如果将它与 :g
或 :v
结合使用,它会非常强大:
:v/foo/m$ 会将所有与模式“foo”不匹配的行移到文件末尾。
:+,$g/^\s*class\s\+\i\+/t。将在光标之后复制表单类 xxx 的所有后续行。
参考::help range
、:help :t
、:help :g
、:help :m
和 :help :v
:
时,它会转换为 '<,'>
,因此它会预先选择视觉选择跨越的行范围。因此,在可视模式下,:t0
将复制开头的行。
:t.
是该问题的确切答案。
YP
或 Yp
或 yyp
。
Y
通常被重新映射到 y$
(拉(复制)直到行尾(从当前光标位置,而不是行首))。在 .vimrc
中使用此行::nnoremap Y y$
yyP
https://i.stack.imgur.com/dz2pb.gif
没有比这更简单的了!从正常模式:
yy
然后移动到要粘贴的行,然后
p
做这个:
首先,yy 复制当前行,然后 p 粘贴。
如果你想要另一种方式:
"ayy
:这会将行存储在缓冲区 a
中。
"ap
:这会将缓冲区 a
的内容放在光标处。
这有很多变化。
"a5yy
:这会将 5 行存储在缓冲区 a
中。
如需更多乐趣,请参阅“Vim help files。
yyp - 用“yippee”记住它!
多行,中间有一个数字:
y7yp
:.,.+7 copy .+7
:P
yyp - 粘贴后
yyP - 粘贴之前
我喜欢:Shift+v(立即选择整行,如果需要,让您选择其他行),y,p
另一种选择是:
nmap <C-d> mzyyp`z
为您提供保留光标位置的优势。
您也可以尝试
对于不了解 vi 的人来说,上面的一些答案可能会用“粘贴...在当前行之后/之前”这样的短语来误导他。它实际上是“粘贴......在光标之后/之前”。 yy 或 Y 复制该行或 dd 删除该行
然后
将复制或删除的文本粘贴到光标之后或 P 将复制或删除的文本粘贴到光标之前
如需更多键绑定,您可以访问此站点:vi Complete Key Binding List
我知道我迟到了,但无论如何;我的 .vimrc 中有这个:
nnoremap <C-d> :copy .<CR>
vnoremap <C-d> :copy '><CR>
:copy
命令只是将选定的行或范围(总是整行)复制到作为其参数给出的行号下方。
在正常模式下,它的作用是copy .
将此行复制到该行的正下方。
在可视模式下,它变成'<,'> copy '>
从选择开始到选择结束复制到选择结束下方的行。
默认是 yyp,但我已经使用这个重新绑定一年左右并且喜欢它:
" set Y to duplicate lines, works in visual mode as well. nnoremap Y yyp vnoremap Y y`>pgv
1 陷阱:当您使用“p”放置该行时,它会将其放在光标所在的行之后,因此如果您想在您正在拉动的行之后添加该行,请不要将光标向下移动一行在放新线之前。
对于那些开始学习 vi 的人,这里是 vi 的一个很好的介绍,通过并排列出 vi 命令到典型的 Windows GUI 编辑器光标移动和快捷键。它列出了所有基本命令,包括 yy(复制行)和 p(粘贴后)或 P(粘贴前)。
如果您想复制一行并将其粘贴到当前喜欢的下方,就像在 Sublime Ctrl+Shift+D 中一样,然后您可以将其添加到您的 .vimrc
文件中。
nmap <S-C-d> <Esc>Yp
或者,对于插入模式:
imap <S-C-d> <Esc>Ypa
i
添加到末尾以重新输入它会破坏 undo
,因此在插入模式下复制行的解决方案并不像看起来那么简单。
imap <S-C-d> <Esc>Ypi
插入模式和 nmap <S-C-d> <Esc>Yp
处于正常模式
我更喜欢在 .vimrc
中定义自定义键盘映射 Ctrl+D 以在 normal 模式和 insert< 中复制当前行/em> 模式:
" duplicate line in normal mode:
nnoremap <C-D> Yp
" duplicate line in insert mode:
inoremap <C-D> <Esc> Ypi
我喜欢使用这个映射:
:nnoremap yp Yp
因为它可以与原生 YP
命令一起使用。
我使用这个映射,类似于 vscode。我希望它有用!!!!
nnoremap <A-d> :t. <CR>==
inoremap <A-d> <Esc>:t. <CR>==gi
vnoremap <A-d> :t$ <CR>gv=gv
不定期副业成功案例分享
Y
映射到y$
。 (与D
和C
一致;(但与 Vi 不兼容(没人关心。)))这甚至在:help Y
中提出。yj
或yk
会更快,尤其是因为您不会在一个字符上加倍。另外,yk
是2yy
做不到的向后版本,你可以把要达到的行数放在y9j
或y2k
等中。唯一的区别是你的计数必须是n-1
总共有n
行,但无论如何你的头脑都能学会。