fed*_*qui 1 linux vi vim copy copy-paste
我想复制粘贴一些行vi.
我有一个类似的文字
python class1 def:
code code code
...
code code code
last line class1
python class2 def:
code code code
...
code code code
Run Code Online (Sandbox Code Playgroud)
我想复制整个class1.我试图这样做yNy,所以我需要得到N,也就是说,计算班级的行数.
然后我认为得到python class1 def:(我们说X)和last line class1(Y)的行号是很好的,计算N=Y-X,转到类的第一行并执行yNy.但是,我无法弄清楚如何获得行号.
那么,有什么方法可以知道我在哪条线上吗?一般来说,有没有其他方法可以像我指示的那样复制粘贴整个块?
这是我的vi版本:
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Oct 26 2012 16:44:45)
Included patches: 1-547
Run Code Online (Sandbox Code Playgroud)
仅使用普通模式命令:
你可以做的y}就是从当前行到包括下一个空行的所有内容,划定Vim认为是"段落"的内容.根据您的编码风格,这可能有效,也可能无效.
还在使用的"段落"的概念,你可以做yip或yap从一个"段落"的任何地方.
您可以设置number允许您查看绝对行号的选项,因此可以执行y10G"将此处的所有内容从此处拉到第10行".
您可以设置relativenumber允许您查看相对行号的选项,因此可以执行y5j"将此处的所有内容从下方拉到5行".
你可以做V/foo<CR>y从这里到foo行的所有东西.
更一般地说,您可以简单地使用视觉模式来选择您想要的东西并将其拉出来.
您还可以在类的第一行设置标记ma,将光标移动到最后一行并执行y'a(这听起来像是一个Lovecraftian神的名字).
使用Ex命令:
因为上述number选项显示绝对行号,您可以看到该类在第10行结束并执行:.,10y.
因为前面提到的relativenumber选项显示了相对的行号,你可以看到该类在下面的5行结束并执行:,+5y(删除隐含的.).
使用您的状态行(或不):
你可以:set ruler有,如果你有一个在你的状态栏右侧显示的当前行号或命令行的右侧,如果你没有一个状态行.
使用Vimscript:
您可以使用它line('.')来检索当前行的编号.
使用自定义文本对象:
vim.org上有许多自定义文本对象可用于缩进块,函数参数和许多其他内容.也许有一个Python类.
更一般地说,我建议你设置ruler,number或relativenumber永久地在你的设置,~/.vimrc并习惯它.
ruler 是最不具有侵略性的,但它也是最有限的:你知道你在哪里但是当你想要定义一个目标时它根本没有帮助.
number 是最经典的,可以用来轻松定位特定的线.
relativenumber起初有点奇怪,并且number可以很容易地用于定位特定的线.
就我而言,选择number或者relativenumber是品味问题.我觉得relativenumber非常直观,YMMV.
当前行号可以通过获取:.=。 Ctrl-g提供更多详细信息,包括文件名,列信息,...
为了复制一个块,转到要复制的行的开头0。击中v将启动可视模式。导航到要复制的最后一行。扬克y。(可视选择现在在缓冲区中。)
在命令模式下尝试以下操作
:.=返回屏幕底部当前行的行号yNy或Nyy复制接下来的 N 行,包括当前行p将复制的文本粘贴到当前行之后此外,
:set nu!在命令模式下将打开/关闭每行开头的行号。