vi / vim编辑器,复制一个块(不是通常的操作)


76

在vi / vim编辑器中,我需要复制一个块。有很多方法,但是一种方法非常快捷。

  1. 以某种方式标记第一行,

  2. 然后以某种方式标记终点线

  3. 然后输入一些命令来复制标记的行。

  4. 然后复制,可能使用'p',但不确定。

有人知道命令吗(不是yy或10yy)?提前致谢。

Answers:


41

另一个可能更容易记住的选项是使用ma和在两行上放置标记mb,然后运行:'a,'byank

完成这项任务的方法有很多,只是提供了另一种方法。


1
是。您也可以浏览特定的寄存器,例如。:'a,'by a
2012年

1
我从未在vi中找到令人满意且可调用的复制粘贴方法,但是这种解决方案确实是一流的。另外,我将此添加到.vimrc“ command!P:'a,'byank”中,以允许“ P”键用作快捷方式
sphere4a

128

仅用于V选择行或v选择字符或Ctrlv选择块。

当所选内容跨越您要复制的区域时,只需点击y并用于p将其粘贴到您喜欢的任何位置...


3
在Windows PC上,Ctrl+v剪贴板上的剪贴板在哪里,您应该使用它Ctrl+q来选择一个块
Wouter J

1
在macOS中(至少),您需要通过v或进入VISUAL模式V,然后按p
arshbot '19

98

他们的文件说:

剪切和粘贴:

  1. 将光标放在要开始切割的位置。
  2. v选择字符(或大写V选择整行)。
  3. 将光标移到要剪切的末尾。
  4. 按下d进行剪切(或y复制)。
  5. 移至您要粘贴的位置。
  6. 按下P可在光标之前粘贴,或p在之后粘贴。

复制和粘贴按照与步骤4相同的步骤执行,除了要按y而不是d的步骤4:

d= delete=cut

y= yank=copy


OP询问VI,您的答案关于VIM,在VI中无济于事。
volkit

@Kamil afaik在Mac OS上的vi命令启动vim而不是vi。但是无论如何,ops问题已经改变,现在它包含了vim。因此,我认为Kaleems的答案还可以。我的第一个评论可能会对使用vi的人有所帮助(与vim有点不同),并且想知道为什么这个答案对他不起作用。
volkit


18

听起来您想在文件中放置标记

mx在光标下放置一个名为x的标记

y'x抽出光标当前位置和包含标记x的线之间的所有内容。

您可以'x将光标简单地移动到带有标记的行。

您可以使用`x(后退标记)移动到标记的确切位置


我一直都在做的一件事是拉动光标之间的所有内容并将x标记到剪贴板中

您可以这样做:

"+y'x

注意:在某些环境中,剪贴板缓冲区由*而不是表示+


类似的问题,有一些好的答案:


是的标记也是一种很好的方法,尤其是当您使用纯vi而不是vim时。
AndréKeller 2012年

我想早就该介绍V我的工作流程了。不知道为什么我不使用它……
jahroy 2012年

9

键盘快捷键是:

  1. 对于复制:将光标放在程序段的开头,然后按md ,然后转到程序段的末尾,然后按y'd。这将选择要粘贴的块,然后按p

  2. 对于剪切:将光标放在程序段的开头,然后按ma ,然后转到程序段的末尾,然后按d'a。这将选择要粘贴的块,然后按p


1

您可以像在vi中一样执行此操作,例如,将3020的行拖到末尾,执行以下命令(将块写入文件):

:3020,$ w / tmp / yank

并将此块写入另一行/文件,转到所需位置并执行下一条命令(插入之前写入的文件):

:r / tmp / yank

(提醒:不要忘记删除文件:/ tmp / yank)

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.