如何删除vim中的非空白字符?

我正在寻找一个命令来删除光标到同一行上的第一个非空白字符。 我谷歌search了一段时间,并尝试了几种可能性。 没有快乐。 有人在那里知道如何做到这一点?

序列d w将删除光标中的所有字符,直到下一个字。 这意味着如果你站在单词中间执行命令,它将删除该单词的剩余部分和随后的空格。 可能或不可能是你要找的。

你可能想尝试d W。 这将通过“WORD”来移动(参见WORD和word的帮助),这看起来更适合您的问题。

dw不会满足你的需求,例如:

 array[1] = 5 

在定位的同时打dw将留给你:

 [1] = 5 

但是使用dW会导致:

 = 5 

要删除一个单词而不pipe光标在哪个字母上,使用daw (助记符“删除一个单词”)也可以与其他命令一起使用,例如caw “更改单词”。 ft是可以和d一起使用的其他优秀命令。 例如,要从光标删除并包括例如字母“t”的第一次出现,请使用dft 。 要保持“t”不变,请改用dtt

这里的许多答案并不直接解决这个问题。 提问者想知道如何删除第一个 空白字符。 其中一些答案技术上是可行的,但让我们看看如何明确地做到这一点。

以下示例演示了如何在正常模式下执行此操作,其变体占光标的起始位置。 带下划线的字符表示光标位置:


d w :foo_ bar→foobar

在其他答案中描述的命令命令在我们的光标位于目标之前时可以很好地删除到下一个非空白字符。


d b :foo bar→bar

当然,我们想要尝试d w的倒数,将其向后删除到游标之前的第一个非空白字符。 但是,如上所示,删除字符命令会删除比我们预期的更多的字符 – 它也会删除前一个字词。 对于这种情况,我们应该使用:

d T <?> :foo bar→foobar

…其中<?>是光标前的第一个非空白字符。 d elete back-un T il命令将所有内容删除,但不包括字符<?> ,在这种情况下,它是“foo”末尾的字符o


d t <?> :foo_ bar→foobar

类似于前面的命令,我们可以使用d elete un t il (小写字母“t”)来删除字符直到下一个<?>字符(本例中为“bar”中的b )。 就这个问题而言,这达到与d w相同的结果。


d w :foo _ bar→foobar

如果我们的光标位于空白的中间,我们可以使用d elete nner w ord命令从两侧删除空白。


d / <?> :foo_ \n bar→foobar

如果我们想要删除的空白包括换行符,我们可以使用上面的命令直到匹配<?>模式,在这种情况下, 模式只是第一个非空白字符。 如图所示,按Enter完成该命令。

当第一个非空白字符出现在断点之后的行的开头时,Vim将删除空格,但将目标留在下一行。 我们需要在上面的命令中添加J代替行(大写字母“j”)。

J :foo_ \n酒吧→foobar

d w应该工作。