在VIM中向前/向后移动超过行末的字符数量

12

如何在VIM中向前/向后移动超出行末指定数量的字符?

我知道可以输入例如

25l

前进25个字符,但是此命令始终会在行末停止。还有25go,但是它从缓冲区的开头开始前进,而不是从当前光标位置开始前进。我想要向前移动一定数量的字符,包括行末字符。

4个回答

12

我认为你需要的是使用空格键向前移动,使用退格键向后移动。

空格键会在下一行继续。如果你想在当前行添加空格而不是移到下一行,那么选项:set virtualedit=onemore就适合你。


1
这是正确的答案。例如,输入 500[空格键] 可以向前移动 500 个空格,与 L 键不同,它可以越过行末。 - Tyler Durden

5
您可以设置virtualedit选项:
:set ve=all

虚拟编辑指的是光标可以放置在没有实际字符的位置。

3

'whichwrap'选项决定了哪些动作可以将光标移动到另一行。默认情况下,左/右移动都不能实现该功能。

不建议包含h,l,因为某些宏和插件可能依赖于原来的行为并且会出错 - 由您自己测试和决定。但是通过(后者用于插入模式和可选)可以安全地包括光标键。

:set whichwrap+=<,>,[,]

然后,你可以通过 5 命令在行尾跨越 5 个字符。

是否计算换行符取决于 'virtualedit' 选项。如果想要包含换行符:

:set virtualedit=onemore

1
另一种可能性(不需要更改选项,但更冗长)是使用 search() 函数。以下代码将使光标向右移动 6 个字符。它通过从当前位置 (\%#) 开始匹配,包括换行符(\_.)的 7 个字符来实现这一点。
:call search('\%#\_.\{7}', 'ce')

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