Vim:删除所有空格直到下一个非空字符

14

假设我有以下代码:

<p>
    Hello
</p>

我想把它做出来

<p>Hello</p>

我想在行1的结尾处以普通模式将光标置于“ > ”上,并有一个命令可删除所有空格直到下一个字符。我能想到的最接近的动作是

d/Hello

要删除从“Hello”开始的所有内容,但问题是它还会删除光标下方的字符('>'),因此最终结果是

<pHello
</p>

你会如何做到这一点?


3
在投票关闭之前,请阅读以下内容:Vim 问题:在 Stack Overflow 还是 Super User 提问 - Lieven Keersmaekers
3个回答

19

一种方法,当您不需要重复此操作多次时使用。

JxJx

解释:

J           # Join current line with next one but substitute end of line with a space.
x           # Remove the space.
Jx          # Repeat same process for last line.

我需要多次执行并尝试通过“.”重复操作,但这只会重复“x”而不是“J”。如果需要多次重复此操作,您能否提供一个示例? - k0pernikus

6

Vim中有一个tag文本对象:

  • 将光标放在标签内,按下vat选中整个标签
  • 按下:,它变成:'<,'>
  • 键入j,它变成:'<,'>j
  • 按下Enter来合并行

:help v_at

at          "a tag block", select [count] tag blocks, from the
            [count]'th unmatched "<aaa>" backwards to the matching
            "</aaa>", including the "<aaa>" and "</aaa>".
            See |tag-blocks| about the details.
            When used in Visual mode it is made characterwise.

2
vatJ 会得到相同的结果。 - Kambus
3
因为 :join 添加了空格,所以这并没有实际回答问题。 - Randy Morris

2
当你站在第二行的任何位置(写有“Hello”的那一行),按下以下键:^d0vatgJ。简单地解释一下:
  1. ^ 将会跳转到第一个非空格字符,即H
  2. d0 将会删除至行首
  3. vat 将会选择整个标签
  4. gJ 将会合并所有行而不插入空格
如果你从H开始,可以跳过^这一步。

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