如何以类似于IntelliJ IDEA/Resharper 中的 + 或Eclipse中的+ + /的方式在Vim中复制整行?CtrlDCtrlAlt↑↓
21 回答
yy或Y复制行(助记符:y ank)或
删除
行
dd(Vim 将您删除的内容复制到类似剪贴板的“寄存器”中,如剪切操作)
然后
p将复制或删除的文本粘贴到当前行
之后
或
P将复制或删除的文本粘贴到当前行之前
正常模式:查看其他答案。
前任方式:
:t.
将复制该行,:t 7
将在第 7 行之后复制它,:,+t0
将复制文件开头的当前行和下一行(,+
是范围的同义词.,.+1
),:1,t$
将从开头复制行直到光标位置到结尾(1,
是 range 的同义词1,.
)。
如果您需要移动而不是复制,请使用:m
代替:t
.
如果将它与:g
or结合使用,这将非常强大:v
:
:v/foo/m$
会将所有与模式“foo”不匹配的行移至文件末尾。:+,$g/^\s*class\s\+\i\+/t.
class xxx
将在光标之后复制表单的所有后续行。
参考::help range
, :help :t
, :help :g
,:help :m
和:help :v
YP
或Yp
或yyp
。
没有比这更简单的了!从正常模式:
yy
然后移动到要粘贴的行,然后
p
yy
将拉当前行而不删除它
dd
将删除当前行
p
将由put
前面的任何一种方法抓取一条线
做这个:
首先,yy复制当前行,然后p粘贴。
如果你想要另一种方式:
"ayy
:这会将行存储在缓冲区中a
。
"ap
:这会将缓冲区的内容放在a
光标处。
这有很多变化。
"a5yy
:这会将 5 行存储在缓冲区中a
。
请参阅“ Vim 帮助文件以获得更多乐趣。
yyp- 用“yippee”记住它!
多行,中间有一个数字:
y7yp
yyp- 粘贴后
yyP- 粘贴之前
我喜欢: Shift+ v(立即选择整行并让您根据需要选择其他行),y,p
另一种选择是:
nmap <C-d> mzyyp`z
为您提供保留光标位置的优势。
您也可以尝试 <Cx><Cl> ,它将从插入模式重复最后一行,并为您带来一个包含所有行的完成窗口。它几乎像 <Cp>
对于不了解 vi 的人来说,上面的一些答案可能会用“粘贴...在当前行之后/之前”这样的短语来误导他。
它实际上是“粘贴......在光标之后/之前”。
yy或Y复制该行
或
dd删除该行
然后
p将复制或删除的文本粘贴到光标后或
将复制或删除的文本粘贴到光标前
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
我更喜欢定义自定义键盘映射Ctrl+ Din以在正常模式和插入.vimrc
模式下复制当前行:
" 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