如何知道VI在光标所在的哪一行?

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)

rom*_*inl 6

  • 仅使用普通模式命令:

    你可以做的y}就是从当前行到包括下一个空行的所有内容,划定Vim认为是"段落"的内容.根据您的编码风格,这可能有效,也可能无效.

    还在使用的"段落"的概念,你可以做yipyap从一个"段落"的任何地方.

    您可以设置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,numberrelativenumber永久地在你的设置,~/.vimrc并习惯它.

  • ruler 是最不具有侵略性的,但它也是最有限的:你知道你在哪里但是当你想要定义一个目标时它根本没有帮助.

  • number 是最经典的,可以用来轻松定位特定的线.

  • relativenumber起初有点奇怪,并且number可以很容易地用于定位特定的线.

就我而言,选择number或者relativenumber是品味问题.我觉得relativenumber非常直观,YMMV.


dev*_*ull 6

当前行号可以通过获取:.=Ctrl-g提供更多详细信息,包括文件名,列信息,...

为了复制一个块,转到要复制的行的开头0。击中v将启动可视模式。导航到要复制的最后一行。扬克y。(可视选择现在在缓冲区中。)


Shi*_*wal 5

在命令模式下尝试以下操作

  1. :.=返回屏幕底部当前行的行号
  2. yNyNyy复制接下来的 N 行,包括当前行
  3. p将复制的文本粘贴到当前行之后

此外,

:set nu!在命令模式下将打开/关闭每行开头的行号。