如何删除vim中的非空格?

Sin*_*one 58 vim whitespace

我正在寻找一个命令从光标删除到同一行上的第一个非空白字符.我用Google搜索了一段时间,尝试了几种可能性.没有快乐.那里有人知道怎么做吗?

ric*_*son 91

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

  • +1.确切地说,"w"表示"移动到下一个单词的开头","d <运动>"从当前位置删除到运动所需的位置. (21认同)
  • 要删除一个单词,无论光标在哪个字母上,使用`daw`(助记符"删除一个单词")也适用于其他命令,例如`caw`"更改单词" (11认同)
  • 这样做。这有点违反直觉 - 我希望 dw 的意思是“删除当前单词,从光标开始”。但它有效,它有效。谢谢。 (2认同)
  • 如果存在单词,`daw`似乎也会删除单词之前的空格.一个更好的组合使用是"diw",它在word中被删除.无论光标位置如何,它都可以工作. (2认同)

sid*_*yll 20

你可能想试试dW.这将按"WORD"移动(请参阅WORD和word的帮助),这看起来更适合您的问题.

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

array[1] = 5
Run Code Online (Sandbox Code Playgroud)

击中dw位置a时会让你:

[1] = 5
Run Code Online (Sandbox Code Playgroud)

但使用dW将导致:

= 5
Run Code Online (Sandbox Code Playgroud)


Cy *_*nol 18

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

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


     dw:foo_ bar→foobar

当我们的光标位于目标之前时,其他答案中描述的delete word命令可以正常删除下一个非空白字符.


     db:foo bar→bar

当然,我们想要尝试反向dw删除向后到光标的第一个非空白字符.但是,如上所示,delete back-word命令删除的次数超出了我们的预期 - 它也会删除前一个词.对于这种情况,我们应该使用:

     dT<?>:foo bar→foobar

...在<?>光标之前的第一个非空白字符.该delete背联合国T金正日命令删除所有内容了,但不包括性格<?>,它在这种情况下,是字符o在"富"的结束.


     dt<?>:foo_ bar→foobar

与上一个命令类似,我们可以使用delete un til(小写"t")向前删除字符,直到下一个<?>字符(b在本例中为"bar").这实现了与dw该问题的目的相同的结果.


     diw:foo _ bar→foobar

如果我们的光标位于空白的中间,我们可以使用delete inner word命令从两侧移除空白.


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

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

当第一个非空白字符出现在中断后的行的开头时,Vim将删除空白,但将目标留在下一行.我们需要添加J到上面的命令JOIN行(大写"J").

     d/<?>J:foo_      \nbar→foobar


Fre*_*ihl 7

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