有没有一个 Vim 的动作命令可以将光标移动到当前单词的开头?

4

假设我的光标位置如下图所示:

cursor over text

在正常模式下按下 b,我可以跳到单词的开头。

enter image description here

太棒了!

如果我将光标移动到1这样

enter image description here

并按下b,我们就有了

enter image description here

问题:

是否有移动光标到单词开头的动作命令,以便如果单词只有一个字符,则光标保留在初始位置?在我的示例中,光标应停留在1

我正在寻找此移动命令以实现宏,在某些步骤中将光标移动到单词的开头,有时单词只有一个字符。


如果单词只有一个字符,则保持在初始位置。这样,下次运行命令时光标就不会移动了?再运行一次——还是不会移动吗? - phd
这样的命令不存在,宏是不可能的,而函数可能是可行的,但在所有情况下都很难调试。忘了它吧。 - phd
1
尝试一下:"_yiw - user938271
3个回答

12

3
搜索一个快速解决方案,然后发现引用了我8年前在Reddit上的评论,这感觉真是太不可思议了:D - Sri Kadimisetty
感谢Sri首先提供解决方案。 - Moustache
lb 在所有情况下都能完美运作。 - undefined
lb在至少一个情况下会失败,很快就会想到:只有一个字长的单词行。如果这恰好是文件的最后一行,那么这两种方法都会失败。 - undefined

2

我找到了这个答案在Vim中将光标移动到当前单词的末尾, 它与我的问题有些相似...

应用那里展示的思路,我应该始终向前移动一个字符l,然后使用b在单词开头移动。这有效,并且对于不同大小的单词是一致的。


它能处理单个字符的单词吗?我不相信它可以。实际上,如果您连续执行两次,我认为它也无法正常工作。 - phd
你是对的,如果执行两次就不起作用了......但是有一个解决方法,就是始终将光标移动到单词的开头.... - Pablo Burgos
请看我的答案,wb 可以避免双重执行或单个字符单词的问题。 - Moustache
我真的不太明白你们在说什么,lb 在我的端上运行得非常完美,即使是单个字母的单词,甚至连续使用 lblb 时,光标都能正确地返回到单词 "1"(就像 wbwbbwbw 一样)。 - undefined

1
我不相信有这样的动作存在(如果我错了,请任何人纠正我)
但是你可以通过搜索实现:
:call search('\<', 'bc')
  • \< 匹配单词的开头

  • b 代表向后查找
  • c 是为了接受光标下的匹配项

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