如何在命令行模式下使用相对行号?


16

最近,我从实用Vim中学习了一种无需将光标从当前位置移动即可复制或移动行块的方法。这是在命令行模式下完成的。例如

:123,133m.  # moves lines from 123 to 133 below the cursor position.

虽然我喜欢它,但是键入长行号很麻烦,尤其是当文件有太多行时。

有时,要移动的线相对靠近光标(但是我不想移动光标,拉动,回到我原来的位置,粘贴!)。如果我可以使用相对数字,那将很棒,类似于我们在正常模式下的操作。就像在说

将当前行上方10行的5行移动到此处

简而言之,如何在命令行模式(类似于普通模式)中使用相对数字?

Answers:


23

假设您的行从当前行的15到10行跨越,则可以使用相对行号实现您所要求的:

:-10,-15m.

不幸的是,当指定后退范围时,Vim要求您确认这是否是您真正想要的。为了避免确认步骤,您可以silent在命令前键入,或仅指定转发范围:

:-15,-10m.

如您所料,+可用于引用当前行下方的行。

可以通过以下方式找到详细的帮助:

:help cmdline-ranges

1
但是我从未使用过此功能。我做的15k d5j 10j P
joeytwiddle

区别在于15k,5j在命令模式下工作,而答案中解释的是在插入模式下。因此,根据模式,我们可以选择合适的模式。插入模式下的命令通常是运行其他命令的选择标准。
Soundararajan

12

您可以使用范围内的硬数字:

:200,300command

或相对数字:

:-27,+46command

或手动标记:

:'a,'bcommand

或自动标记:

:'[,'>command

或搜索:

:?foo?,/bar/command

或行快捷键:

:.,$command

或以上技巧的任意组合:

:?foo?,+46command
:'a,$command
...

3

您可以.-10,.+3在任何Ex命令cp中使用相对寻址(例如)。:help :range

或者,看看我的LineJuggler插件;它提供了几个简短的映射来移动线或复制它们,所有这些映射都采用相对线偏移量[count]

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.