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

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


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

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


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


总之,如何在命令行模式(类似于普通模式)?

#1 楼

假设您的行数比当前行数高15到10行,则可以使用相对行号实现所需的内容:

:-10,-15m.


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

:-15,-10m.


您可能希望+可以用于引用行

详细帮助可以找到:

:help cmdline-ranges


评论


但是我从未使用过此功能。我做15k d5j 10jP。

– joeytwiddle
2015年10月30日在9:24

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

– Soundararajan
19年8月25日在2:33

#2 楼

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

:200,300command


或相对数字:

:-27,+46command


或手动标记:

:'a,'bcommand


或自动标记:

:'[,'>command


或搜索:

:?foo?,/bar/command


或行快捷键:

:.,$command


或以上技巧的任意组合:

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


#3 楼

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

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