VIM:如何在正常模式下删除行尾的3个字?

VIM:如何在正常模式下删除行尾的3个字?,vim,Vim,最短的套餐是什么 另外,我通常做ACtrl+wCtrl+wCtrl+wEsc。 换句话说,我必须跳转到插入模式 p.p.S.d3b不起作用。$3bD 或 30亿美元 …如果您还想删除尾随空格。到行尾,返回3个单词,然后删除到行尾:$3b D $3gelD 或 转到行尾,删除后面的3个单词,然后删除多余的字符:$3db x此命令序列 $3bD 这是目前我能想到的最短的方法,但它留下了一个丑陋的尾随空间 $3gelD 是另一种消除尾随空格的方法 $3gelD 你也可以跳出框框思考,用空格代替

最短的套餐是什么

另外,我通常做ACtrl+wCtrl+wCtrl+wEsc。
换句话说,我必须跳转到插入模式

p.p.S.d3b不起作用。

$3bD

30亿美元


…如果您还想删除尾随空格。

到行尾,返回3个单词,然后删除到行尾:$3b D

$3gelD


转到行尾,删除后面的3个单词,然后删除多余的字符:$3db x

此命令序列

$3bD
这是目前我能想到的最短的方法,但它留下了一个丑陋的尾随空间

$3gelD
是另一种消除尾随空格的方法

$3gelD
你也可以跳出框框思考,用空格代替文字:

$3F D
30亿美元去哪

  • 美元到一行的末尾
  • 3.下一个是哪三个
  • b倒转三个[一个不带修饰语]字
  • D删除光标下的字符,直到行尾
此外,您还可以在ex模式下使用命令来实现相同的功能

:norm! $3bD

正如其他人提到的,
$3bD
是最短的,
$3bDx
将足以删除剩余的空白,假设它正好是一个空格或制表符

为了解释所有空白,可以使用
$3gelD
。此选项的好处是在大多数情况下都能正确清理,但当一行正好包含3个单词时,它会失败,因为
3ge
运动会跳回到前一行

另一种方法是基于
daw
。由于
3daw
向前动作,因此必须使用
$daw..
$3b3daw
。对于3个单词,
$daw..
更短,可能更理想,但
$3b3daw
更像Vim风格,可以轻松扩展到更多单词


b
ge
w
可以替换为
b
ge
w
,以删除单词而不是单词。

删除N个单词的宏?如果您处于要删除的位置,只需使用
d$
删除行尾的所有内容。通常我在行的开头。这个问题是一个很好的例子,说明Vim中几乎所有内容都是上下文的。做我们想做的事情有很多种方法,正确的方法可能因情况而异。同样的逻辑也适用于“我应该使用宏还是应该使用
n.
还是应该使用
:g
?”。最后一个逻辑可能不同,因为它可能更接近于使用单词边界而不是单词边界(这
ge
b
使用)。它修复了后面的空白问题,但是,如果单词之间用制表符或多个空格分隔,则@romainl
$3F D
将不起作用<代码>$3bDx稍微好一点,但您的另一个建议是
$3gelD
<代码>$3b3daw的作用相同,但更长<代码>$daw..是一个有趣的替代方案。没有特定的用例,我们只能进行假设<代码>$3F D假定单词之间用空格分隔
$d3b
$3bD
和变体都是一样的,基于OP尝试使用
d3b
失败,并且假设他知道我的解决方案中的
B
@NikitaKouevda,我同意
$3gelD
可能是最好的。不过,我更喜欢你的
$daw..
。想把它作为一个答案吗?不幸的是,
$daw..
只有在不使用
virtualedit
选项的情况下才有效。使用virtualedit将其设置为
all
onemore
,另一种选择是
$caw..
;在这种情况下,
$3bDx
也会失败。