在Vim中,如何在可视模式下操作相对范围是最好的方式?

19

我经常使用类似这样的命令来删除、复制和粘贴:

:3,6y
自从 Vim 7 开始,我已经切换到使用相对行号了。我发现相对行号在使用命令如 h,j,k,l 等时更加容易使用。
自从切换到使用相对行号后,我发现在操作绝对范围(例如 :3,6y)时有些困难。由于 Vim 显示的是相对行号,所以需要花费太长时间来确定需要选择哪些绝对行号。
如果你的设置显示的是相对行号,那么怎样最好/最快地在一定范围内进行可视化选择呢?直观上,我正在寻找这样的东西:
:-2,+8y 

(yank the lines from 2 lines above my current position to 
8 lines below my current position.)

2
抱歉,您能否解释一下如何在可视模式下使用 :v 3,6y 命令来删除、复制和粘贴?我不太明白这个命令与可视模式有什么关系。 - sidyll
1
抱歉,我并不想让这个问题针对于视觉模式进行表述。我已经编辑过它,现在应该是正确的了。谢谢。 - drbunsen
1个回答

25

你试过你的简单方法吗?

:-2,+8y 等同于 :.-2,.+8y,应该可以达到你想要的效果。

请注意,如果你没有指定一个数字,1会被假定,所以::,+y 意味着 .,.+1 y:复制当前行和下一行。

:help range 中并没有很好地解释。相关部分在这里:

Line numbers may be specified with:     *:range* *E14* *{address}*
    [...]
    .       the current line              *:.*
    [...]
Each may be followed (several times) by '+' or '-' and an optional number.
This number is added or subtracted from the preceding line number.  If the
number is omitted, 1 is used.

文档没有说明的是,如果+-前面没有任何内容,会默认添加.


谢谢,这正是我在寻找的。我没有理解文档中句号的用法,当使用负数时,我得到了一个“给定反向范围,是否可以交换(y/n)”的错误提示。 - drbunsen
要进入 :help 的正确部分,您应该在 range 前面添加 : - bongbang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接