2012-01-13 64 views
12

说我有下面的代码:VIM:删除所有的空白,直到下一个非空白字符

<p> 
    Hello 
</p> 

我想让它

<p>Hello</p> 

我想将光标正常模式在行1的末尾,所以在'>'上并且有一个命令来删除所有的空格直到下一个字符。我能想到的最接近的是它删除一切,直到你好运动

d/Hello 

但问题是,它还会删除光标下的字符(“>”),所以我最终

<pHello 
</p> 

你会怎么做?

+3

在投票结束之前,请阅读以下内容:[Vim Questions:SO or SU](http://meta.stackexchange.com/questions/25925/vim-questions-so-or-su) – 2012-01-13 12:43:21

回答

16

的一种方式。

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. 
+0

我需要多次尝试,并尝试通过'.'重复动作,但只重复'x'而不是'J'。如果需要重复多次,请添加一个例子吗? – k0pernikus 2016-11-23 10:46:45

6

有一个tag文本对象在vim:标签内

  • ,把光标,按增值税选择整个标签
  • ,它成为:'<,'>
  • Ĵ ,它变成:'<,'>j
  • 回车加入线
当你将不需要再重复此动作多次
: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' would让你获得相同的结果。 – Kambus 2012-01-13 14:08:16

+3

这实际上并没有回答这个问题,因为':join'增加了空格。 – 2012-01-13 14:28:42

1

当在第二行(也称Hello一)站在任何地方,按下列键:^d0vatgJ。简单地解释说:

  1. ^会去的第一个非空白字符,H
  2. d 将删除该行的开头
  3. v一个t将选择整个标签
  4. Ĵ将加入所有的行不插入空格

如果你开始对H,你可以跳过^一部分。