【发布时间】:2018-07-24 03:40:02
【问题描述】:
如何在 VIM 中向前/向后移动超过行尾的字符数?
我知道我可以打字,例如,
25升
并前进 25 个字符,但此命令将始终在行尾停止。此外,还有25go,但它从缓冲区的开头向前,而不是从当前光标位置向前。我想前进一定数量的字符,包括行尾字符。
【问题讨论】:
标签: vim
如何在 VIM 中向前/向后移动超过行尾的字符数?
我知道我可以打字,例如,
25升
并前进 25 个字符,但此命令将始终在行尾停止。此外,还有25go,但它从缓冲区的开头向前,而不是从当前光标位置向前。我想前进一定数量的字符,包括行尾字符。
【问题讨论】:
标签: vim
我认为您正在寻找的是 space 向前移动和 backspace 向后移动。
space 将在下一行继续。如果您想在当前行中添加空格而不是移动到下一行,那么:set virtualedit=onemore 是您的选择。
【讨论】:
你可以设置virtualedit选项:
:set ve=all
虚拟编辑意味着光标可以定位在没有实际字符的地方。
【讨论】:
'whichwrap' 选项决定了哪些动作可以将光标移动到另一行。默认情况下,左右移动都不会这样做。
不建议包含h,l,因为某些宏和插件可能依赖于原始行为并中断 - 您调用测试和决定。但是包含 ← 和 → 光标键应该是安全的(后一对用于插入模式和可选)
:set whichwrap+=<,>,[,]
然后,您可以在以 5 → 结尾的行上移动 5 个字符。
是否计算换行符取决于'virtualedit' 选项。要包含换行符:
:set virtualedit=onemore
【讨论】:
另一种可能性(不需要更改选项,但更详细)是使用search() 函数。下面将光标向右移动6 个字符。它通过从当前位置 (\%#) 匹配包括换行符 (\_.) 在内的 7 个字符来做到这一点:
:call search('\%#\_.\{7}', 'ce')
【讨论】: